@@ -650,11 +650,11 @@
650 650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
651 651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite_version()] and [sqlite_source_id()].
652 652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
653 653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION "3.7.8"
654 654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION_NUMBER 3007008
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SOURCE_ID "2011-07-19 18:29:00 ed5f0aad6b21066bacd01521e82c22e96991f400"
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SOURCE_ID "2011-08-16 02:07:04 9650d7962804d61f56cac944ff9bb2c7bc111957"
656 656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
657 657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
658 658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Run-Time Library Version Numbers
659 659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: sqlite3_version, sqlite3_sourceid
660 660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -1298,10 +1298,24 @@
1298 1298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** integers where the first integer i the new retry count and the second
1299 1299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** integer is the delay. If either integer is negative, then the setting
1300 1300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is not changed but instead the prior value of that setting is written
1301 1301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** into the array entry, allowing the current retry settings to be
1302 1302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interrogated. The zDbName parameter is ignored.
1303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the
1305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** persistent [WAL | Write AHead Log] setting. By default, the auxiliary
1306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** write ahead log and shared memory files used for transaction control
1307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are automatically deleted when the latest connection to the database
1308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** closes. Setting persistent WAL mode causes those files to persist after
1309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** close. Persisting the files is useful when other processes that do not
1310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** have write permission on the directory containing the database file want
1311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to read the database file, as the WAL and shared memory files must exist
1312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in order for the database to be readable. The fourth parameter to
1313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_file_control()] for this opcode should be a pointer to an integer.
1314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** That integer is 0 to disable persistent WAL mode or 1 to enable persistent
1315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WAL mode. If the integer is -1, then it is overwritten with the current
1316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WAL persistence setting.
1303 1317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1304 1318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1305 1319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_LOCKSTATE 1
1306 1320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_GET_LOCKPROXYFILE 2
1307 1321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SET_LOCKPROXYFILE 3
@@ -1309,10 +1323,11 @@
1309 1323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_SIZE_HINT 5
1310 1324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_CHUNK_SIZE 6
1311 1325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_FILE_POINTER 7
1312 1326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_SYNC_OMITTED 8
1313 1327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_WIN32_AV_RETRY 9
1328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_FCNTL_PERSIST_WAL 10
1314 1329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1315 1330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1316 1331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Mutex Handle
1317 1332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1318 1333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The mutex module within SQLite defines [sqlite3_mutex] to be an
@@ -3382,11 +3397,11 @@
3382 3397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a schema change, on the first [sqlite3_step()] call following any change
3383 3398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to the [sqlite3_bind_text | bindings] of that [parameter].
3384 3399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The specific value of WHERE-clause [parameter] might influence the
3385 3400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** choice of query plan if the parameter is the left-hand side of a [LIKE]
3386 3401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or [GLOB] operator or if the parameter is compared to an indexed column
3387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and the [SQLITE_ENABLE_STAT2] compile-time option is enabled.
3402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled.
3388 3403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the
3389 3404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </li>
3390 3405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ol>
3391 3406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
3392 3407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_prepare(
@@ -7696,10 +7711,22 @@
7696 7711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is 0x00000000ffffffff. But because of quirks of some compilers, we
7697 7712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** have to specify the value in the less intuitive manner shown:
7698 7713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7699 7714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_MAX_U32 ((((u64)1)<<32)-1)
7700 7715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
7717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The datatype used to store estimates of the number of rows in a
7718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table or index. This is an unsigned integer type. For 99.9% of
7719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the world, a 32-bit integer is sufficient. But a 64-bit integer
7720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** can be used at compile-time if desired.
7721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
7722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_64BIT_STATS
7723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef u64 tRowcnt; /* 64-bit only if requested at compile-time */
7724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
7725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef u32 tRowcnt; /* 32-bit is the default */
7726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
7727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
7701 7728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
7702 7729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros to determine whether the machine is big or little endian,
7703 7730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** evaluated at runtime.
7704 7731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7705 7732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_AMALGAMATION
@@ -9897,11 +9924,11 @@
9897 9924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iPKey; /* If not negative, use aCol[iPKey] as the primary key */
9898 9925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCol; /* Number of columns in this table */
9899 9926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Column *aCol; /* Information about each column */
9900 9927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIndex; /* List of SQL indexes on this table. */
9901 9928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tnum; /* Root BTree node for this table (see note above) */
9902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned nRowEst; /* Estimated rows in table - from sqlite_stat1 table */
9929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nRowEst; /* Estimated rows in table - from sqlite_stat1 table */
9903 9930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSelect; /* NULL for tables. Points to definition if a view. */
9904 9931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 nRef; /* Number of pointers to this Table */
9905 9932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 tabFlags; /* Mask of TF_* values */
9906 9933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 keyConf; /* What to do in case of uniqueness conflict on iPKey */
9907 9934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FKey *pFKey; /* Linked list of all foreign keys in this table */
@@ -10096,35 +10123,43 @@
10096 10123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
10097 10124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Index {
10098 10125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zName; /* Name of this index */
10099 10126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nColumn; /* Number of columns in the table used by this index */
10100 10127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *aiColumn; /* Which columns are used by this index. 1st is 0 */
10101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */
10128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */
10102 10129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTable; /* The SQL table being indexed */
10103 10130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tnum; /* Page containing root of this index in database file */
10104 10131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
10105 10132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 autoIndex; /* True if is automatically created (ex: by UNIQUE) */
10106 10133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 bUnordered; /* Use this index for == or IN queries only */
10134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 nSample; /* Number of elements in aSample[] */
10107 10135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zColAff; /* String defining the affinity of each column */
10108 10136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pNext; /* The next index associated with the same table */
10109 10137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Schema *pSchema; /* Schema containing this index */
10110 10138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *aSortOrder; /* Array of size Index.nColumn. True==DESC, False==ASC */
10111 10139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char **azColl; /* Array of collation sequence names for index */
10112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- IndexSample *aSample; /* Array of SQLITE_INDEX_SAMPLES samples */
10140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
10141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt avgEq; /* Average nEq value for key values not in aSample */
10142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IndexSample *aSample; /* Samples of the left-most key */
10143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
10113 10144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
10114 10145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10115 10146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
10116 10147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Each sample stored in the sqlite_stat2 table is represented in memory
10117 10148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using a structure of this type.
10118 10149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
10119 10150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct IndexSample {
10120 10151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
union {
10121 10152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *z; /* Value if eType is SQLITE_TEXT or SQLITE_BLOB */
10122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double r; /* Value if eType is SQLITE_FLOAT or SQLITE_INTEGER */
10153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double r; /* Value if eType is SQLITE_FLOAT */
10154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 i; /* Value if eType is SQLITE_INTEGER */
10123 10155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} u;
10124 10156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 eType; /* SQLITE_NULL, SQLITE_INTEGER ... etc. */
10125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 nByte; /* Size in byte of text or blob. */
10157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u16 nByte; /* Size in byte of text or blob. */
10158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nEq; /* Est. number of rows where the key equals this sample */
10159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nLt; /* Est. number of rows where key is less than this sample */
10160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nDLt; /* Est. number of distinct keys less than this sample */
10126 10161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
10127 10162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10128 10163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
10129 10164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Each token coming out of the lexer is an instance of
10130 10165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this structure. Tokens are also used as part of an expression.
@@ -11326,10 +11361,11 @@
11326 11361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
11327 11362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3ViewGetColumnNames(A,B) 0
11328 11363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
11329 11364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11330 11365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3DropTable(Parse*, SrcList*, int, int);
11366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3CodeDropTable(Parse*, Table*, int, int);
11331 11367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3*, Table*);
11332 11368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOINCREMENT
11333 11369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse);
11334 11370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse);
11335 11371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
@@ -11582,11 +11618,11 @@
11582 11618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8,
11583 11619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void(*)(void*));
11584 11620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value*);
11585 11621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *);
11586 11622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *, const void*, int, u8);
11587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
11623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
11588 11624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *, u8, char *, int, int *);
11589 11625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
11590 11626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **);
11591 11627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8);
11592 11628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_AMALGAMATION
@@ -12208,10 +12244,13 @@
12208 12244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_RTREE
12209 12245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"ENABLE_RTREE",
12210 12246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12211 12247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STAT2
12212 12248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"ENABLE_STAT2",
12249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
12250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
12251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "ENABLE_STAT3",
12213 12252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12214 12253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
12215 12254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"ENABLE_UNLOCK_NOTIFY",
12216 12255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12217 12256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
@@ -14403,11 +14442,11 @@
14403 14442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DO_OS_MALLOC_TEST(0);
14404 14443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 0x87f3f is a mask of SQLITE_OPEN_ flags that are valid to be passed
14405 14444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** down into the VFS layer. Some SQLITE_OPEN_ flags (for example,
14406 14445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before
14407 14446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** reaching the VFS. */
14408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x87f3f, pFlagsOut);
14447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x87f7f, pFlagsOut);
14409 14448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc==SQLITE_OK || pFile->pMethods==0 );
14410 14449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
14411 14450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
14412 14451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
14413 14452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pVfs->xDelete(pVfs, zPath, dirSync);
@@ -20447,11 +20486,11 @@
20447 20486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** no longer required.
20448 20487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
20449 20488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If a malloc failure occurs, NULL is returned and the db.mallocFailed
20450 20489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** flag set.
20451 20490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
20452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
20491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
20453 20492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *db, u8 enc, char *z, int n, int *pnOut){
20454 20493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem m;
20455 20494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&m, 0, sizeof(m));
20456 20495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m.db = db;
20457 20496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemSetStr(&m, z, n, SQLITE_UTF8, SQLITE_STATIC);
@@ -21693,26 +21732,32 @@
21693 21732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return -x;
21694 21733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
21695 21734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
21696 21735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_8_3_NAMES
21697 21736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
21698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If SQLITE_ENABLE_8_3_NAME is set at compile-time and if the database
21737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If SQLITE_ENABLE_8_3_NAMES is set at compile-time and if the database
21699 21738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** filename in zBaseFilename is a URI with the "8_3_names=1" parameter and
21700 21739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if filename in z[] has a suffix (a.k.a. "extension") that is longer than
21701 21740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** three characters, then shorten the suffix on z[] to be the last three
21702 21741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** characters of the original suffix.
21742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
21743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If SQLITE_ENABLE_8_3_NAMES is set to 2 at compile-time, then always
21744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** do the suffix shortening regardless of URI parameter.
21703 21745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
21704 21746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Examples:
21705 21747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
21706 21748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** test.db-journal => test.nal
21707 21749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** test.db-wal => test.wal
21708 21750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** test.db-shm => test.shm
21709 21751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
21710 21752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3FileSuffix3(const char *zBaseFilename, char *z){
21753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_ENABLE_8_3_NAMES<2
21711 21754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zOk;
21712 21755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zOk = sqlite3_uri_parameter(zBaseFilename, "8_3_names");
21713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zOk && sqlite3GetBoolean(zOk) ){
21756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zOk && sqlite3GetBoolean(zOk) )
21757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
21758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
21714 21759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, sz;
21715 21760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sz = sqlite3Strlen30(z);
21716 21761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){}
21717 21762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( z[i]=='.' && ALWAYS(sz>i+4) ) memcpy(&z[i+1], &z[sz-3], 4);
21718 21763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -22242,14 +22287,17 @@
22242 22287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef MEMORY_DEBUG
22243 22288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead."
22244 22289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
22245 22290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
22246 22291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
22247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3OSTrace = 0;
22248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
22292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ifndef SQLITE_DEBUG_OS_TRACE
22293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_DEBUG_OS_TRACE 0
22294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # endif
22295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
22296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
22249 22297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
22250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X)
22298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X)
22251 22299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
22252 22300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
22253 22301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
22254 22302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros for performance tracing. Normally turned off. Only works
22255 22303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on i486 hardware.
@@ -24492,11 +24540,10 @@
24492 24540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct unixFile unixFile;
24493 24541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct unixFile {
24494 24542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_io_methods const *pMethod; /* Always the first entry */
24495 24543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixInodeInfo *pInode; /* Info about locks on this inode */
24496 24544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int h; /* The file descriptor */
24497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int dirfd; /* File descriptor for the directory */
24498 24545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char eFileLock; /* The type of lock held on this fd */
24499 24546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char ctrlFlags; /* Behavioral bits. UNIXFILE_* flags */
24500 24547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int lastErrno; /* The unix errno from last I/O error */
24501 24548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *lockingContext; /* Locking style specific state */
24502 24549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UnixUnusedFd *pUnused; /* Pre-allocated UnixUnusedFd */
@@ -24534,12 +24581,14 @@
24534 24581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
24535 24582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24536 24583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24537 24584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allowed values for the unixFile.ctrlFlags bitmask:
24538 24585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define UNIXFILE_EXCL 0x01 /* Connections from one process only */
24540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define UNIXFILE_RDONLY 0x02 /* Connection is read only */
24586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define UNIXFILE_EXCL 0x01 /* Connections from one process only */
24587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define UNIXFILE_RDONLY 0x02 /* Connection is read only */
24588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define UNIXFILE_PERSIST_WAL 0x04 /* Persistent WAL mode */
24589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define UNIXFILE_DIRSYNC 0x08 /* Directory sync needed */
24541 24590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24542 24591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24543 24592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Include code that is common to all os_*.c files
24544 24593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24545 24594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Include os_common.h in the middle of os_unix.c ***************/
@@ -24574,14 +24623,17 @@
24574 24623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef MEMORY_DEBUG
24575 24624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead."
24576 24625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24577 24626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24578 24627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
24579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3OSTrace = 0;
24580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
24628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ifndef SQLITE_DEBUG_OS_TRACE
24629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_DEBUG_OS_TRACE 0
24630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # endif
24631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
24632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
24581 24633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
24582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X)
24634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X)
24583 24635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24584 24636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24585 24637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24586 24638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros for performance tracing. Normally turned off. Only works
24587 24639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on i486 hardware.
@@ -24786,10 +24838,13 @@
24786 24838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24787 24839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int posixOpen(const char *zFile, int flags, int mode){
24788 24840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return open(zFile, flags, mode);
24789 24841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
24790 24842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Forward reference */
24844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int openDirectory(const char*, int*);
24845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24791 24846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24792 24847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Many system calls are accessed through pointer-to-functions so that
24793 24848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** they may be overridden at runtime to facilitate fault injection during
24794 24849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** testing and sandboxing. The following array holds the names and pointers
24795 24850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to all overrideable system calls.
@@ -24882,10 +24937,16 @@
24882 24937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
24883 24938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "fallocate", (sqlite3_syscall_ptr)0, 0 },
24884 24939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24885 24940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osFallocate ((int(*)(int,off_t,off_t))aSyscall[15].pCurrent)
24886 24941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "unlink", (sqlite3_syscall_ptr)unlink, 0 },
24943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define osUnlink ((int(*)(const char*))aSyscall[16].pCurrent)
24944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "openDirectory", (sqlite3_syscall_ptr)openDirectory, 0 },
24946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define osOpenDirectory ((int(*)(const char*,int*))aSyscall[17].pCurrent)
24947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24887 24948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}; /* End of the overrideable system calls */
24888 24949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24889 24950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24890 24951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is the xSetSystemCall() method of sqlite3_vfs for all of the
24891 24952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "unix" VFSes. Return SQLITE_OK opon successfully updating the
@@ -26238,22 +26299,18 @@
26238 26299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** even on VxWorks. A mutex will be acquired on VxWorks by the
26239 26300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** vxworksReleaseFileId() routine.
26240 26301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
26241 26302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int closeUnixFile(sqlite3_file *id){
26242 26303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pFile = (unixFile*)id;
26243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFile->dirfd>=0 ){
26244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- robust_close(pFile, pFile->dirfd, __LINE__);
26245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFile->dirfd=-1;
26246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
26247 26304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->h>=0 ){
26248 26305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
robust_close(pFile, pFile->h, __LINE__);
26249 26306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->h = -1;
26250 26307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26251 26308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
26252 26309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->pId ){
26253 26310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->isDelete ){
26254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unlink(pFile->pId->zCanonicalName);
26311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osUnlink(pFile->pId->zCanonicalName);
26255 26312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26256 26313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
vxworksReleaseFileId(pFile->pId);
26257 26314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->pId = 0;
26258 26315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26259 26316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -26498,11 +26555,11 @@
26498 26555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
26499 26556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26500 26557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26501 26558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* To fully unlock the database, delete the lock file */
26502 26559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( eFileLock==NO_LOCK );
26503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( unlink(zLockFile) ){
26560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( osUnlink(zLockFile) ){
26504 26561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = 0;
26505 26562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tErrno = errno;
26506 26563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ENOENT != tErrno ){
26507 26564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_IOERR_UNLOCK;
26508 26565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -27733,10 +27790,54 @@
27733 27790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( OS_VXWORKS && rc!= -1 ){
27734 27791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = 0;
27735 27792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27736 27793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
27737 27794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
27796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
27797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Open a file descriptor to the directory containing file zFilename.
27798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If successful, *pFd is set to the opened file descriptor and
27799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK is returned. If an error occurs, either SQLITE_NOMEM
27800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or SQLITE_CANTOPEN is returned and *pFd is set to an undefined
27801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value.
27802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
27803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The directory file descriptor is used for only one thing - to
27804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fsync() a directory to make sure file creation and deletion events
27805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are flushed to disk. Such fsyncs are not needed on newer
27806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** journaling filesystems, but are required on older filesystems.
27807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
27808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine can be overridden using the xSetSysCall interface.
27809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The ability to override this routine was added in support of the
27810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** chromium sandbox. Opening a directory is a security risk (we are
27811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** told) so making it overrideable allows the chromium sandbox to
27812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** replace this routine with a harmless no-op. To make this routine
27813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a no-op, replace it with a stub that returns SQLITE_OK but leaves
27814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** *pFd set to a negative number.
27815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
27816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If SQLITE_OK is returned, the caller is responsible for closing
27817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the file descriptor *pFd using close().
27818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
27819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int openDirectory(const char *zFilename, int *pFd){
27820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
27821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fd = -1;
27822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char zDirname[MAX_PATHNAME+1];
27823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
27824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_snprintf(MAX_PATHNAME, zDirname, "%s", zFilename);
27825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=(int)strlen(zDirname); ii>1 && zDirname[ii]!='/'; ii--);
27826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ii>0 ){
27827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDirname[ii] = '\0';
27828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fd = robust_open(zDirname, O_RDONLY|O_BINARY, 0);
27829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fd>=0 ){
27830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef FD_CLOEXEC
27831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
27832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
27833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("OPENDIR %-3d %s\n", fd, zDirname));
27834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
27835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
27836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pFd = fd;
27837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (fd>=0?SQLITE_OK:unixLogError(SQLITE_CANTOPEN_BKPT, "open", zDirname));
27838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
27738 27839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27739 27840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
27740 27841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Make sure all writes to a particular file are committed to disk.
27741 27842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
27742 27843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If dataOnly==0 then both the file itself and its metadata (file
@@ -27774,32 +27875,25 @@
27774 27875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOError( rc=1 );
27775 27876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
27776 27877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->lastErrno = errno;
27777 27878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return unixLogError(SQLITE_IOERR_FSYNC, "full_fsync", pFile->zPath);
27778 27879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFile->dirfd>=0 ){
27780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- OSTRACE(("DIRSYNC %-3d (have_fullfsync=%d fullsync=%d)\n", pFile->dirfd,
27880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
27881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Also fsync the directory containing the file if the DIRSYNC flag
27882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is set. This is a one-time occurrance. Many systems (examples: AIX)
27883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are unable to fsync a directory, so ignore errors on the fsync.
27884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
27885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pFile->ctrlFlags & UNIXFILE_DIRSYNC ){
27886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int dirfd;
27887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("DIRSYNC %s (have_fullfsync=%d fullsync=%d)\n", pFile->zPath,
27781 27888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
HAVE_FULLFSYNC, isFullsync));
27782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_DISABLE_DIRSYNC
27783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The directory sync is only attempted if full_fsync is
27784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** turned off or unavailable. If a full_fsync occurred above,
27785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** then the directory sync is superfluous.
27786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
27787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (!HAVE_FULLFSYNC || !isFullsync) && full_fsync(pFile->dirfd,0,0) ){
27788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
27789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** We have received multiple reports of fsync() returning
27790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** errors when applied to directories on certain file systems.
27791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A failed directory sync is not a big deal. So it seems
27792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** better to ignore the error. Ticket #1657
27793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
27794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* pFile->lastErrno = errno; */
27795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* return SQLITE_IOERR; */
27796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
27797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
27798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Only need to sync once, so close the directory when we are done */
27799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- robust_close(pFile, pFile->dirfd, __LINE__);
27800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFile->dirfd = -1;
27889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = osOpenDirectory(pFile->zPath, &dirfd);
27890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && dirfd>=0 ){
27891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ full_fsync(dirfd, 0, 0);
27892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ robust_close(pFile, dirfd, __LINE__);
27893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
27894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->ctrlFlags &= ~UNIXFILE_DIRSYNC;
27801 27895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27802 27896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
27803 27897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27804 27898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27805 27899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -27884,17 +27978,23 @@
27884 27978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the user has configured a chunk-size for this file, it could be
27885 27979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that the file needs to be extended at this point. Otherwise, the
27886 27980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_FCNTL_SIZE_HINT operation is a no-op for Unix.
27887 27981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
27888 27982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fcntlSizeHint(unixFile *pFile, i64 nByte){
27889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFile->szChunk ){
27983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { /* preserve indentation of removed "if" */
27890 27984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 nSize; /* Required file size */
27985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 szChunk; /* Chunk size */
27891 27986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct stat buf; /* Used to hold return values of fstat() */
27892 27987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27893 27988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( osFstat(pFile->h, &buf) ) return SQLITE_IOERR_FSTAT;
27894 27989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
27990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ szChunk = pFile->szChunk;
27991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( szChunk==0 ){
27992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nSize = nByte;
27993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
27994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nSize = ((nByte+szChunk-1) / szChunk) * szChunk;
27995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
27896 27996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nSize>(i64)buf.st_size ){
27897 27997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27898 27998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE
27899 27999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The code below is handling the return value of osFallocate()
27900 28000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** correctly. posix_fallocate() is defined to "returns zero on success,
@@ -27933,25 +28033,37 @@
27933 28033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27934 28034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
27935 28035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Information and control of an open file handle.
27936 28036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
27937 28037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int unixFileControl(sqlite3_file *id, int op, void *pArg){
28038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unixFile *pFile = (unixFile*)id;
27938 28039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( op ){
27939 28040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_LOCKSTATE: {
27940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *(int*)pArg = ((unixFile*)id)->eFileLock;
28041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = pFile->eFileLock;
27941 28042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
27942 28043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27943 28044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_LAST_ERRNO: {
27944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *(int*)pArg = ((unixFile*)id)->lastErrno;
28045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = pFile->lastErrno;
27945 28046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
27946 28047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27947 28048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_CHUNK_SIZE: {
27948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ((unixFile*)id)->szChunk = *(int *)pArg;
28049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->szChunk = *(int *)pArg;
27949 28050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
27950 28051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27951 28052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_SIZE_HINT: {
27952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return fcntlSizeHint((unixFile *)id, *(i64 *)pArg);
28053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return fcntlSizeHint(pFile, *(i64 *)pArg);
28054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
28055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_FCNTL_PERSIST_WAL: {
28056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bPersist = *(int*)pArg;
28057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bPersist<0 ){
28058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = (pFile->ctrlFlags & UNIXFILE_PERSIST_WAL)!=0;
28059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( bPersist==0 ){
28060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->ctrlFlags &= ~UNIXFILE_PERSIST_WAL;
28061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
28062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->ctrlFlags |= UNIXFILE_PERSIST_WAL;
28063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
28064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
27953 28065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27954 28066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef NDEBUG
27955 28067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The pager calls this method to signal that it has done
27956 28068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a rollback and that the database is therefore unchanged and
27957 28069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it hence it is OK for the transaction change counter to be
@@ -28632,11 +28744,11 @@
28632 28744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** shared-memory file, too */
28633 28745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixEnterMutex();
28634 28746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pShmNode->nRef>0 );
28635 28747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pShmNode->nRef--;
28636 28748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pShmNode->nRef==0 ){
28637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( deleteFlag && pShmNode->h>=0 ) unlink(pShmNode->zFilename);
28749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( deleteFlag && pShmNode->h>=0 ) osUnlink(pShmNode->zFilename);
28638 28750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixShmPurge(pDbFd);
28639 28751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
28640 28752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixLeaveMutex();
28641 28753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
28642 28754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
@@ -28945,11 +29057,11 @@
28945 29057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Initialize the contents of the unixFile structure pointed to by pId.
28946 29058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
28947 29059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fillInUnixFile(
28948 29060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs *pVfs, /* Pointer to vfs object */
28949 29061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int h, /* Open file descriptor of file being opened */
28950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int dirfd, /* Directory file descriptor */
29062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int syncDir, /* True to sync directory on first sync */
28951 29063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_file *pId, /* Write to the unixFile structure here */
28952 29064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFilename, /* Name of the file being opened */
28953 29065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int noLock, /* Omit locking if true */
28954 29066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isDelete, /* Delete on close if true */
28955 29067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isReadOnly /* True if the file is opened read-only */
@@ -28976,20 +29088,22 @@
28976 29088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zFilename==0 || zFilename[0]=='/' );
28977 29089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
28978 29090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
28979 29091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("OPEN %-3d %s\n", h, zFilename));
28980 29092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->h = h;
28981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->dirfd = dirfd;
28982 29093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->zPath = zFilename;
28983 29094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( memcmp(pVfs->zName,"unix-excl",10)==0 ){
28984 29095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->ctrlFlags = UNIXFILE_EXCL;
28985 29096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
28986 29097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->ctrlFlags = 0;
28987 29098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
28988 29099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isReadOnly ){
28989 29100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->ctrlFlags |= UNIXFILE_RDONLY;
28990 29101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( syncDir ){
29103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->ctrlFlags |= UNIXFILE_DIRSYNC;
29104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
28991 29105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
28992 29106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
28993 29107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pId = vxworksFindFileId(zFilename);
28994 29108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew->pId==0 ){
28995 29109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
noLock = 1;
@@ -29112,56 +29226,24 @@
29112 29226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->lastErrno = 0;
29113 29227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
29114 29228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
29115 29229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( h>=0 ) robust_close(pNew, h, __LINE__);
29116 29230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
h = -1;
29117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unlink(zFilename);
29231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osUnlink(zFilename);
29118 29232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isDelete = 0;
29119 29233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29120 29234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->isDelete = isDelete;
29121 29235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29122 29236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
29123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( dirfd>=0 ) robust_close(pNew, dirfd, __LINE__);
29124 29237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( h>=0 ) robust_close(pNew, h, __LINE__);
29125 29238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
29126 29239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pMethod = pLockingStyle;
29127 29240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OpenCounter(+1);
29128 29241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29129 29242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
29130 29243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29131 29244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
29133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Open a file descriptor to the directory containing file zFilename.
29134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If successful, *pFd is set to the opened file descriptor and
29135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLITE_OK is returned. If an error occurs, either SQLITE_NOMEM
29136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or SQLITE_CANTOPEN is returned and *pFd is set to an undefined
29137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** value.
29138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
29139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If SQLITE_OK is returned, the caller is responsible for closing
29140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the file descriptor *pFd using close().
29141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
29142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int openDirectory(const char *zFilename, int *pFd){
29143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int ii;
29144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int fd = -1;
29145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char zDirname[MAX_PATHNAME+1];
29146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
29147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_snprintf(MAX_PATHNAME, zDirname, "%s", zFilename);
29148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(ii=(int)strlen(zDirname); ii>1 && zDirname[ii]!='/'; ii--);
29149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ii>0 ){
29150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zDirname[ii] = '\0';
29151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fd = robust_open(zDirname, O_RDONLY|O_BINARY, 0);
29152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( fd>=0 ){
29153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef FD_CLOEXEC
29154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
29155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
29156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- OSTRACE(("OPENDIR %-3d %s\n", fd, zDirname));
29157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pFd = fd;
29160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return (fd>=0?SQLITE_OK:unixLogError(SQLITE_CANTOPEN_BKPT, "open", zDirname));
29161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
29163 29245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
29164 29246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the name of a directory in which to put temporary files.
29165 29247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If no suitable temporary file directory can be found, return NULL.
29166 29248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
29167 29249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char *unixTempFileDir(void){
@@ -29272,11 +29354,11 @@
29272 29354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ignored and -1 is returned. The caller will try to open a new file
29273 29355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** descriptor on the same path, fail, and return an error to SQLite.
29274 29356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
29275 29357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Even if a subsequent open() call does succeed, the consequences of
29276 29358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not searching for a resusable file descriptor are not dire. */
29277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0==stat(zPath, &sStat) ){
29359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==osStat(zPath, &sStat) ){
29278 29360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixInodeInfo *pInode;
29279 29361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29280 29362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixEnterMutex();
29281 29363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pInode = inodeList;
29282 29364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pInode && (pInode->fileId.dev!=sStat.st_dev
@@ -29348,11 +29430,11 @@
29348 29430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( nDb>0 && zPath[nDb]!='-' ) nDb--;
29349 29431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nDb==0 ) return SQLITE_OK;
29350 29432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(zDb, zPath, nDb);
29351 29433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDb[nDb] = '\0';
29352 29434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0==stat(zDb, &sStat) ){
29435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==osStat(zDb, &sStat) ){
29354 29436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pMode = sStat.st_mode & 0777;
29355 29437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
29356 29438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_IOERR_FSTAT;
29357 29439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29358 29440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( flags & SQLITE_OPEN_DELETEONCLOSE ){
@@ -29390,11 +29472,10 @@
29390 29472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int flags, /* Input flags to control the opening */
29391 29473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pOutFlags /* Output flags returned to SQLite core */
29392 29474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
29393 29475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *p = (unixFile *)pFile;
29394 29476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fd = -1; /* File descriptor returned by open() */
29395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int dirfd = -1; /* Directory file descriptor */
29396 29477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int openFlags = 0; /* Flags to pass to open() */
29397 29478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eType = flags&0xFFFFFF00; /* Type of file to open */
29398 29479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int noLock; /* True to omit locking primitives */
29399 29480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK; /* Function Return Code */
29400 29481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -29409,11 +29490,11 @@
29409 29490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29410 29491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If creating a master or main-file journal, this function will open
29411 29492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a file-descriptor on the directory too. The first time unixSync()
29412 29493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is called the directory file descriptor will be fsync()ed and close()d.
29413 29494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
29414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int isOpenDirectory = (isCreate && (
29495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int syncDir = (isCreate && (
29415 29496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eType==SQLITE_OPEN_MASTER_JOURNAL
29416 29497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| eType==SQLITE_OPEN_MAIN_JOURNAL
29417 29498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| eType==SQLITE_OPEN_WAL
29418 29499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
));
29419 29500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -29463,11 +29544,11 @@
29463 29544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29464 29545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29465 29546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pUnused = pUnused;
29466 29547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( !zName ){
29467 29548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If zName is NULL, the upper layer is requesting a temp file. */
29468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert(isDelete && !isOpenDirectory);
29549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(isDelete && !syncDir);
29469 29550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = unixGetTempname(MAX_PATHNAME+1, zTmpname);
29470 29551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
29471 29552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
29472 29553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29473 29554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zName = zTmpname;
@@ -29519,32 +29600,19 @@
29519 29600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29520 29601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isDelete ){
29521 29602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
29522 29603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zPath = zName;
29523 29604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
29524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unlink(zName);
29605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osUnlink(zName);
29525 29606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29526 29607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29527 29608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_ENABLE_LOCKING_STYLE
29528 29609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else{
29529 29610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->openFlags = openFlags;
29530 29611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29531 29612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29532 29613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( isOpenDirectory ){
29534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = openDirectory(zPath, &dirfd);
29535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=SQLITE_OK ){
29536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* It is safe to close fd at this point, because it is guaranteed not
29537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to be open on a database file. If it were open on a database file,
29538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** it would not be safe to close as this would release any locks held
29539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** on the file by this process. */
29540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( eType!=SQLITE_OPEN_MAIN_DB );
29541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- robust_close(p, fd, __LINE__);
29542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto open_finished;
29543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
29546 29614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef FD_CLOEXEC
29547 29615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
29548 29616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29549 29617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29550 29618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
noLock = eType!=SQLITE_OPEN_MAIN_DB;
@@ -29552,11 +29620,10 @@
29552 29620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29553 29621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
29554 29622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct statfs fsInfo;
29555 29623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fstatfs(fd, &fsInfo) == -1 ){
29556 29624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((unixFile*)pFile)->lastErrno = errno;
29557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( dirfd>=0 ) robust_close(p, dirfd, __LINE__);
29558 29625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
robust_close(p, fd, __LINE__);
29559 29626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOERR_ACCESS;
29560 29627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29561 29628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if (0 == strncmp("msdos", fsInfo.f_fstypename, 5)) {
29562 29629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS;
@@ -29584,21 +29651,18 @@
29584 29651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then the call to close() will cancel those locks. In practice,
29585 29652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** we're assuming that statfs() doesn't fail very often. At least
29586 29653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not while other file descriptors opened by the same process on
29587 29654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the same file are working. */
29588 29655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lastErrno = errno;
29589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( dirfd>=0 ){
29590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- robust_close(p, dirfd, __LINE__);
29591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29592 29656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
robust_close(p, fd, __LINE__);
29593 29657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_IOERR_ACCESS;
29594 29658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto open_finished;
29595 29659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29596 29660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
useProxy = !(fsInfo.f_flags&MNT_LOCAL);
29597 29661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29598 29662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( useProxy ){
29599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fillInUnixFile(pVfs, fd, dirfd, pFile, zPath, noLock,
29663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fillInUnixFile(pVfs, fd, syncDir, pFile, zPath, noLock,
29600 29664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isDelete, isReadonly);
29601 29665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
29602 29666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = proxyTransformUnixFile((unixFile*)pFile, ":auto:");
29603 29667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
29604 29668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Use unixClose to clean up the resources added in fillInUnixFile
@@ -29612,11 +29676,11 @@
29612 29676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto open_finished;
29613 29677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29614 29678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29615 29679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29616 29680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fillInUnixFile(pVfs, fd, dirfd, pFile, zPath, noLock,
29681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fillInUnixFile(pVfs, fd, syncDir, pFile, zPath, noLock,
29618 29682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isDelete, isReadonly);
29619 29683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
open_finished:
29620 29684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
29621 29685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p->pUnused);
29622 29686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -29634,17 +29698,17 @@
29634 29698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int dirSync /* If true, fsync() directory after deleting file */
29635 29699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
29636 29700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
29637 29701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(NotUsed);
29638 29702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOError(return SQLITE_IOERR_DELETE);
29639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( unlink(zPath)==(-1) && errno!=ENOENT ){
29703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( osUnlink(zPath)==(-1) && errno!=ENOENT ){
29640 29704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
29641 29705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29642 29706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_DISABLE_DIRSYNC
29643 29707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( dirSync ){
29644 29708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fd;
29645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = openDirectory(zPath, &fd);
29709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = osOpenDirectory(zPath, &fd);
29646 29710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
29647 29711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
29648 29712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fsync(fd)==-1 )
29649 29713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
29650 29714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fsync(fd) )
@@ -29693,11 +29757,11 @@
29693 29757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(!"Invalid flags argument");
29694 29758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29695 29759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pResOut = (osAccess(zPath, amode)==0);
29696 29760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags==SQLITE_ACCESS_EXISTS && *pResOut ){
29697 29761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct stat buf;
29698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0==stat(zPath, &buf) && buf.st_size==0 ){
29762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==osStat(zPath, &buf) && buf.st_size==0 ){
29699 29763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pResOut = 0;
29700 29764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29701 29765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29702 29766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
29703 29767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -30212,11 +30276,10 @@
30212 30276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *path, /* path for the new unixFile */
30213 30277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile **ppFile, /* unixFile created and returned by ref */
30214 30278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int islockfile /* if non zero missing dirs will be created */
30215 30279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
) {
30216 30280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fd = -1;
30217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int dirfd = -1;
30218 30281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pNew;
30219 30282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
30220 30283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int openFlags = O_RDWR | O_CREAT;
30221 30284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs dummyVfs;
30222 30285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int terrno = 0;
@@ -30277,11 +30340,11 @@
30277 30340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dummyVfs.zName = "dummy";
30278 30341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pUnused->fd = fd;
30279 30342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pUnused->flags = openFlags;
30280 30343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pUnused = pUnused;
30281 30344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fillInUnixFile(&dummyVfs, fd, dirfd, (sqlite3_file*)pNew, path, 0, 0, 0);
30345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fillInUnixFile(&dummyVfs, fd, 0, (sqlite3_file*)pNew, path, 0, 0, 0);
30283 30346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
30284 30347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppFile = pNew;
30285 30348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
30286 30349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30287 30350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end_create_proxy:
@@ -30391,11 +30454,11 @@
30391 30454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
conchFile->openFlags = O_RDWR | O_CREAT;
30392 30455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30393 30456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end_breaklock:
30394 30457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
30395 30458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fd>=0 ){
30396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unlink(tPath);
30459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osUnlink(tPath);
30397 30460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
robust_close(pFile, fd, __LINE__);
30398 30461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30399 30462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fprintf(stderr, "failed to break stale lock on %s, %s\n", cPath, errmsg);
30400 30463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30401 30464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
@@ -31214,11 +31277,11 @@
31214 31277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
31215 31278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int i; /* Loop counter */
31216 31279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31217 31280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Double-check that the aSyscall[] array has been constructed
31218 31281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** correctly. See ticket [bb3a86e890c8e96ab] */
31219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( ArraySize(aSyscall)==16 );
31282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( ArraySize(aSyscall)==18 );
31220 31283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31221 31284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Register all VFSes defined in the aVfs[] array */
31222 31285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
31223 31286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs_register(&aVfs[i], i==0);
31224 31287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -31331,14 +31394,17 @@
31331 31394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef MEMORY_DEBUG
31332 31395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead."
31333 31396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31334 31397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31335 31398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
31336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3OSTrace = 0;
31337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
31399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ifndef SQLITE_DEBUG_OS_TRACE
31400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_DEBUG_OS_TRACE 0
31401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # endif
31402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
31403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
31338 31404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
31339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X)
31405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X)
31340 31406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31341 31407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31342 31408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31343 31409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros for performance tracing. Normally turned off. Only works
31344 31410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on i486 hardware.
@@ -31546,12 +31612,13 @@
31546 31612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct winFile winFile;
31547 31613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct winFile {
31548 31614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_io_methods *pMethod; /*** Must be first ***/
31549 31615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs *pVfs; /* The VFS used to open this file */
31550 31616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
HANDLE h; /* Handle for accessing the file */
31551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned char locktype; /* Type of lock currently held on this file */
31617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 locktype; /* Type of lock currently held on this file */
31552 31618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
short sharedLockByte; /* Randomly chosen byte used as a shared lock */
31619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 bPersistWal; /* True to persist WAL files */
31553 31620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DWORD lastErrno; /* The Windows errno from the last I/O error */
31554 31621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DWORD sectorSize; /* Sector size of the device file is on */
31555 31622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winShm *pShm; /* Instance of shared memory on this file */
31556 31623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zPath; /* Full pathname of this file */
31557 31624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int szChunk; /* Chunk size configured by FCNTL_CHUNK_SIZE */
@@ -32778,29 +32845,39 @@
32778 32845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32779 32846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
32780 32847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Control and query of the open file handle.
32781 32848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
32782 32849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winFileControl(sqlite3_file *id, int op, void *pArg){
32850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winFile *pFile = (winFile*)id;
32783 32851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( op ){
32784 32852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_LOCKSTATE: {
32785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *(int*)pArg = ((winFile*)id)->locktype;
32853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = pFile->locktype;
32786 32854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
32787 32855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32788 32856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_LAST_ERRNO: {
32789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *(int*)pArg = (int)((winFile*)id)->lastErrno;
32857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = (int)pFile->lastErrno;
32790 32858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
32791 32859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32792 32860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_CHUNK_SIZE: {
32793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ((winFile*)id)->szChunk = *(int *)pArg;
32861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->szChunk = *(int *)pArg;
32794 32862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
32795 32863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32796 32864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_SIZE_HINT: {
32797 32865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 sz = *(sqlite3_int64*)pArg;
32798 32866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOErrorBenign(1);
32799 32867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winTruncate(id, sz);
32800 32868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOErrorBenign(0);
32801 32869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
32870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
32871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_FCNTL_PERSIST_WAL: {
32872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bPersist = *(int*)pArg;
32873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bPersist<0 ){
32874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = pFile->bPersistWal;
32875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
32876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->bPersistWal = bPersist!=0;
32877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
32878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
32802 32879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32803 32880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_SYNC_OMITTED: {
32804 32881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
32805 32882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32806 32883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_WIN32_AV_RETRY: {
@@ -33623,10 +33700,11 @@
33623 33700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isTemp = 0;
33624 33701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
33625 33702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winFile *pFile = (winFile*)id;
33626 33703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *zConverted; /* Filename in OS encoding */
33627 33704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUtf8Name = zName; /* Filename in UTF-8 encoding */
33705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cnt = 0;
33628 33706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33629 33707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If argument zPath is a NULL pointer, this function is required to open
33630 33708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a temporary file. Use this buffer to store the file name in.
33631 33709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33632 33710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zTmpname[MAX_PATH+1]; /* Buffer used to create temp filename */
@@ -33742,34 +33820,34 @@
33742 33820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE
33743 33821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwFlagsAndAttributes |= FILE_FLAG_RANDOM_ACCESS;
33744 33822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
33745 33823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33746 33824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isNT() ){
33747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- h = CreateFileW((WCHAR*)zConverted,
33748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwDesiredAccess,
33749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwShareMode,
33750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- NULL,
33751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwCreationDisposition,
33752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwFlagsAndAttributes,
33753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- NULL
33754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
33825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (h = CreateFileW((WCHAR*)zConverted,
33826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwDesiredAccess,
33827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwShareMode, NULL,
33828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwCreationDisposition,
33829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwFlagsAndAttributes,
33830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ NULL))==INVALID_HANDLE_VALUE &&
33831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ retryIoerr(&cnt) ){}
33755 33832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
33756 33833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Since the ASCII version of these Windows API do not exist for WINCE,
33757 33834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it's important to not reference them for WINCE builds.
33758 33835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33759 33836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE==0
33760 33837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
33761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- h = CreateFileA((char*)zConverted,
33762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwDesiredAccess,
33763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwShareMode,
33764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- NULL,
33765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwCreationDisposition,
33766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwFlagsAndAttributes,
33767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- NULL
33768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
33838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (h = CreateFileA((char*)zConverted,
33839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwDesiredAccess,
33840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwShareMode, NULL,
33841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwCreationDisposition,
33842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwFlagsAndAttributes,
33843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ NULL))==INVALID_HANDLE_VALUE &&
33844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ retryIoerr(&cnt) ){}
33769 33845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
33770 33846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
33848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ logIoerr(cnt);
33771 33849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33772 33850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("OPEN %d %s 0x%lx %s\n",
33773 33851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
h, zName, dwDesiredAccess,
33774 33852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
h==INVALID_HANDLE_VALUE ? "failed" : "ok"));
33775 33853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -33895,15 +33973,17 @@
33895 33973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zConverted = convertUtf8Filename(zFilename);
33896 33974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zConverted==0 ){
33897 33975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
33898 33976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33899 33977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isNT() ){
33978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cnt = 0;
33900 33979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WIN32_FILE_ATTRIBUTE_DATA sAttrData;
33901 33980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sAttrData, 0, sizeof(sAttrData));
33902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( GetFileAttributesExW((WCHAR*)zConverted,
33981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( !(rc = GetFileAttributesExW((WCHAR*)zConverted,
33903 33982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
GetFileExInfoStandard,
33904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &sAttrData) ){
33983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ &sAttrData)) && retryIoerr(&cnt) ){}
33984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc ){
33905 33985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file
33906 33986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as if it does not exist.
33907 33987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33908 33988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags==SQLITE_ACCESS_EXISTS
33909 33989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sAttrData.nFileSizeHigh==0
@@ -33911,10 +33991,11 @@
33911 33991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
attr = INVALID_FILE_ATTRIBUTES;
33912 33992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
33913 33993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
attr = sAttrData.dwFileAttributes;
33914 33994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33915 33995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
33996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ logIoerr(cnt);
33916 33997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( GetLastError()!=ERROR_FILE_NOT_FOUND ){
33917 33998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winLogError(SQLITE_IOERR_ACCESS, "winAccess", zFilename);
33918 33999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zConverted);
33919 34000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOERR_ACCESS;
33920 34001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -33935,11 +34016,12 @@
33935 34016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_ACCESS_READ:
33936 34017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_ACCESS_EXISTS:
33937 34018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = attr!=INVALID_FILE_ATTRIBUTES;
33938 34019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
33939 34020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_ACCESS_READWRITE:
33940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = (attr & FILE_ATTRIBUTE_READONLY)==0;
34021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = attr!=INVALID_FILE_ATTRIBUTES &&
34022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (attr & FILE_ATTRIBUTE_READONLY)==0;
33941 34023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
33942 34024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default:
33943 34025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(!"Invalid flags argument");
33944 34026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33945 34027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pResOut = rc;
@@ -45519,17 +45601,19 @@
45519 45601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
45520 45602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The EXCLUSIVE lock is not released before returning.
45521 45603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
45522 45604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3OsLock(pWal->pDbFd, SQLITE_LOCK_EXCLUSIVE);
45523 45605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
45606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bPersistWal = -1;
45524 45607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWal->exclusiveMode==WAL_NORMAL_MODE ){
45525 45608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWal->exclusiveMode = WAL_EXCLUSIVE_MODE;
45526 45609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
45527 45610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3WalCheckpoint(
45528 45611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWal, SQLITE_CHECKPOINT_PASSIVE, 0, 0, sync_flags, nBuf, zBuf, 0, 0
45529 45612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
45530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
45613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_PERSIST_WAL, &bPersistWal);
45614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && bPersistWal!=1 ){
45531 45615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isDelete = 1;
45532 45616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
45533 45617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
45534 45618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
45535 45619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
walIndexClose(pWal, isDelete);
@@ -57508,15 +57592,15 @@
57508 57592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppVal = 0;
57509 57593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
57510 57594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57511 57595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
op = pExpr->op;
57512 57596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
57513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* op can only be TK_REGISTER if we have compiled with SQLITE_ENABLE_STAT2.
57597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* op can only be TK_REGISTER if we have compiled with SQLITE_ENABLE_STAT3.
57514 57598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The ifdef here is to enable us to achieve 100% branch test coverage even
57515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** when SQLITE_ENABLE_STAT2 is omitted.
57599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** when SQLITE_ENABLE_STAT3 is omitted.
57516 57600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
57517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
57601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
57518 57602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op==TK_REGISTER ) op = pExpr->op2;
57519 57603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
57520 57604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( NEVER(op==TK_REGISTER) ) op = pExpr->op2;
57521 57605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
57522 57606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -58208,12 +58292,12 @@
58208 58292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
58209 58293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Change the P2 operand of instruction addr so that it points to
58210 58294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the address of the next instruction to be coded.
58211 58295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
58212 58296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe *p, int addr){
58213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( addr>=0 );
58214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeChangeP2(p, addr, p->nOp);
58297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( addr>=0 || p->db->mallocFailed );
58298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( addr>=0 ) sqlite3VdbeChangeP2(p, addr, p->nOp);
58215 58299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
58216 58300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
58217 58301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
58218 58302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
58219 58303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the input FuncDef structure is ephemeral, then free it. If
@@ -63874,10 +63958,15 @@
63874 63958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( memIsValid(pIn1) );
63875 63959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memAboutToChange(p, pOut);
63876 63960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ac.zMalloc = pOut->zMalloc;
63877 63961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->zMalloc = 0;
63878 63962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemMove(pOut, pIn1);
63963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
63964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pOut->pScopyFrom>=&aMem[u.ac.p1] && pOut->pScopyFrom<&aMem[u.ac.p1+pOp->p3] ){
63965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOut->pScopyFrom += u.ac.p1 - pOp->p2;
63966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
63967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
63879 63968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1->zMalloc = u.ac.zMalloc;
63880 63969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(u.ac.p2++, pOut);
63881 63970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1++;
63882 63971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut++;
63883 63972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -75923,10 +76012,100 @@
75923 76012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you find forgiveness for yourself and forgive others.
75924 76013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you share freely, never taking more than you give.
75925 76014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
75926 76015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
75927 76016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains code associated with the ANALYZE command.
76017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The ANALYZE command gather statistics about the content of tables
76019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and indices. These statistics are made available to the query planner
76020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to help it make better decisions about how to perform queries.
76021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The following system tables are or have been supported:
76023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE TABLE sqlite_stat1(tbl, idx, stat);
76025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE TABLE sqlite_stat2(tbl, idx, sampleno, sample);
76026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE TABLE sqlite_stat3(tbl, idx, nEq, nLt, nDLt, sample);
76027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Additional tables might be added in future releases of SQLite.
76029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sqlite_stat2 table is not created or used unless the SQLite version
76030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is between 3.6.18 and 3.7.7, inclusive, and unless SQLite is compiled
76031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with SQLITE_ENABLE_STAT2. The sqlite_stat2 table is deprecated.
76032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sqlite_stat2 table is superceded by sqlite_stat3, which is only
76033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** created and used by SQLite versions after 2011-08-09 with
76034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_ENABLE_STAT3 defined. The fucntionality of sqlite_stat3
76035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is a superset of sqlite_stat2.
76036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Format of sqlite_stat1:
76038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** There is normally one row per index, with the index identified by the
76040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** name in the idx column. The tbl column is the name of the table to
76041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** which the index belongs. In each such row, the stat column will be
76042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a string consisting of a list of integers. The first integer in this
76043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** list is the number of rows in the index and in the table. The second
76044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** integer is the average number of rows in the index that have the same
76045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value in the first column of the index. The third integer is the average
76046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** number of rows in the index that have the same value for the first two
76047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** columns. The N-th integer (for N>1) is the average number of rows in
76048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the index which have the same value for the first N-1 columns. For
76049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a K-column index, there will be K+1 integers in the stat column. If
76050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the index is unique, then the last integer will be 1.
76051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The list of integers in the stat column can optionally be followed
76053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by the keyword "unordered". The "unordered" keyword, if it is present,
76054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** must be separated from the last integer by a single space. If the
76055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "unordered" keyword is present, then the query planner assumes that
76056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the index is unordered and will not use the index for a range query.
76057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the sqlite_stat1.idx column is NULL, then the sqlite_stat1.stat
76059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** column contains a single integer which is the (estimated) number of
76060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** rows in the table identified by sqlite_stat1.tbl.
76061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Format of sqlite_stat2:
76063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sqlite_stat2 is only created and is only used if SQLite is compiled
76065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with SQLITE_ENABLE_STAT2 and if the SQLite version number is between
76066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 3.6.18 and 3.7.7. The "stat2" table contains additional information
76067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** about the distribution of keys within an index. The index is identified by
76068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the "idx" column and the "tbl" column is the name of the table to which
76069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the index belongs. There are usually 10 rows in the sqlite_stat2
76070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table for each index.
76071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sqlite_stat2 entries for an index that have sampleno between 0 and 9
76073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** inclusive are samples of the left-most key value in the index taken at
76074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** evenly spaced points along the index. Let the number of samples be S
76075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (10 in the standard build) and let C be the number of rows in the index.
76076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Then the sampled rows are given by:
76077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** rownumber = (i*C*2 + C)/(S*2)
76079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** For i between 0 and S-1. Conceptually, the index space is divided into
76081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** S uniform buckets and the samples are the middle row from each bucket.
76082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The format for sqlite_stat2 is recorded here for legacy reference. This
76084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** version of SQLite does not support sqlite_stat2. It neither reads nor
76085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** writes the sqlite_stat2 table. This version of SQLite only supports
76086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite_stat3.
76087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Format for sqlite_stat3:
76089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sqlite_stat3 is an enhancement to sqlite_stat2. A new name is
76091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** used to avoid compatibility problems.
76092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The format of the sqlite_stat3 table is similar to the format for
76094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the sqlite_stat2 table, with the following changes: (1)
76095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sampleno column is removed. (2) Every sample has nEq, nLt, and nDLt
76096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** columns which hold the approximate number of rows in the table that
76097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** exactly match the sample, the approximate number of rows with values
76098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** less than the sample, and the approximate number of distinct key values
76099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** less than the sample, respectively. (3) The number of samples can vary
76100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from one table to the next; the sample count does not have to be
76101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** exactly 10 as it is with sqlite_stat2.
76102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The ANALYZE command will typically generate sqlite_stat3 tables
76104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that contain between 10 and 40 samples which are distributed across
76105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the key space, though not uniformly, and which include samples with
76106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** largest possible nEq values.
75928 76107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75929 76108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_ANALYZE
75930 76109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75931 76110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
75932 76111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine generates code that opens the sqlite_stat1 table for
@@ -75954,12 +76133,18 @@
75954 76133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const struct {
75955 76134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName;
75956 76135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zCols;
75957 76136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} aTable[] = {
75958 76137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "sqlite_stat1", "tbl,idx,stat" },
75959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
75960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { "sqlite_stat2", "tbl,idx,sampleno,sample" },
76138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
76139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "sqlite_stat3", "tbl,idx,neq,nlt,ndlt,sample" },
76140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
76141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
76142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char *azToDrop[] = {
76143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "sqlite_stat2",
76144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_ENABLE_STAT3
76145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "sqlite_stat3",
75961 76146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
75962 76147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
75963 76148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75964 76149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int aRoot[] = {0, 0};
75965 76150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 aCreateTbl[] = {0, 0};
@@ -75971,10 +76156,21 @@
75971 76156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( v==0 ) return;
75972 76157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3BtreeHoldsAllMutexes(db) );
75973 76158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3VdbeDb(v)==db );
75974 76159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDb = &db->aDb[iDb];
75975 76160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Drop all statistics tables that this version of SQLite does not
76162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** understand.
76163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
76164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<ArraySize(azToDrop); i++){
76165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = sqlite3FindTable(db, azToDrop[i], pDb->zName);
76166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTab ) sqlite3CodeDropTable(pParse, pTab, iDb, 0);
76167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Create new statistic tables if they do not exist, or clear them
76170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if they do already exist.
76171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
75976 76172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<ArraySize(aTable); i++){
75977 76173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTab = aTable[i].zName;
75978 76174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pStat;
75979 76175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pStat = sqlite3FindTable(db, zTab, pDb->zName))==0 ){
75980 76176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The sqlite_stat[12] table does not exist. Create it. Note that a
@@ -76001,17 +76197,238 @@
76001 76197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Clear, aRoot[i], iDb);
76002 76198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76003 76199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76004 76200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76005 76201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Open the sqlite_stat[12] tables for writing. */
76202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Open the sqlite_stat[13] tables for writing. */
76007 76203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<ArraySize(aTable); i++){
76008 76204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_OpenWrite, iStatCur+i, aRoot[i], iDb);
76009 76205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP4(v, -1, (char *)3, P4_INT32);
76010 76206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, aCreateTbl[i]);
76011 76207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76012 76208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
76211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Recommended number of samples for sqlite_stat3
76212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
76213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_STAT3_SAMPLES
76214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_STAT3_SAMPLES 24
76215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
76216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
76218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Three SQL functions - stat3_init(), stat3_push(), and stat3_pop() -
76219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** share an instance of the following structure to hold their state
76220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** information.
76221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
76222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct Stat3Accum Stat3Accum;
76223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Stat3Accum {
76224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nRow; /* Number of rows in the entire table */
76225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nPSample; /* How often to do a periodic sample */
76226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iMin; /* Index of entry with minimum nEq and hash */
76227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int mxSample; /* Maximum number of samples to accumulate */
76228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nSample; /* Current number of samples */
76229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 iPrn; /* Pseudo-random number used for sampling */
76230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Stat3Sample {
76231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iRowid; /* Rowid in main table of the key */
76232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nEq; /* sqlite_stat3.nEq */
76233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nLt; /* sqlite_stat3.nLt */
76234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nDLt; /* sqlite_stat3.nDLt */
76235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 isPSample; /* True if a periodic sample */
76236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 iHash; /* Tiebreaker hash */
76237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } *a; /* An array of samples */
76238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
76239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
76241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
76242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Implementation of the stat3_init(C,S) SQL function. The two parameters
76243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are the number of rows in the table or index (C) and the number of samples
76244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to accumulate (S).
76245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine allocates the Stat3Accum object.
76247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The return value is the Stat3Accum object (P).
76249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
76250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void stat3Init(
76251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *context,
76252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int argc,
76253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **argv
76254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
76255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Stat3Accum *p;
76256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nRow;
76257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int mxSample;
76258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n;
76259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(argc);
76261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRow = (tRowcnt)sqlite3_value_int64(argv[0]);
76262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mxSample = sqlite3_value_int(argv[1]);
76263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = sizeof(*p) + sizeof(p->a[0])*mxSample;
76264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = sqlite3_malloc( n );
76265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p==0 ){
76266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error_nomem(context);
76267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
76268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(p, 0, n);
76270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->a = (struct Stat3Sample*)&p[1];
76271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nRow = nRow;
76272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->mxSample = mxSample;
76273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nPSample = p->nRow/(mxSample/3+1) + 1;
76274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_randomness(sizeof(p->iPrn), &p->iPrn);
76275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_blob(context, p, sizeof(p), sqlite3_free);
76276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const FuncDef stat3InitFuncdef = {
76278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 2, /* nArg */
76279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_UTF8, /* iPrefEnc */
76280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* flags */
76281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* pUserData */
76282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* pNext */
76283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stat3Init, /* xFunc */
76284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xStep */
76285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xFinalize */
76286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "stat3_init", /* zName */
76287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* pHash */
76288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0 /* pDestructor */
76289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
76290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
76293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Implementation of the stat3_push(nEq,nLt,nDLt,rowid,P) SQL function. The
76294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** arguments describe a single key instance. This routine makes the
76295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** decision about whether or not to retain this key for the sqlite_stat3
76296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table.
76297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The return value is NULL.
76299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
76300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void stat3Push(
76301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *context,
76302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int argc,
76303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **argv
76304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
76305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Stat3Accum *p = (Stat3Accum*)sqlite3_value_blob(argv[4]);
76306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nEq = sqlite3_value_int64(argv[0]);
76307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nLt = sqlite3_value_int64(argv[1]);
76308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt nDLt = sqlite3_value_int64(argv[2]);
76309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 rowid = sqlite3_value_int64(argv[3]);
76310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 isPSample = 0;
76311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 doInsert = 0;
76312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iMin = p->iMin;
76313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Stat3Sample *pSample;
76314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
76315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 h;
76316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(context);
76318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(argc);
76319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nEq==0 ) return;
76320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ h = p->iPrn = p->iPrn*1103515245 + 12345;
76321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (nLt/p->nPSample)!=((nEq+nLt)/p->nPSample) ){
76322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ doInsert = isPSample = 1;
76323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( p->nSample<p->mxSample ){
76324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ doInsert = 1;
76325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
76326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nEq>p->a[iMin].nEq || (nEq==p->a[iMin].nEq && h>p->a[iMin].iHash) ){
76327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ doInsert = 1;
76328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !doInsert ) return;
76331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nSample==p->mxSample ){
76332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iMin<p->nSample ){
76333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(&p->a[iMin], &p->a[iMin+1], sizeof(p->a[0])*(p->nSample-iMin));
76334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample = &p->a[p->nSample-1];
76336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
76337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample = &p->a[p->nSample++];
76338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->iRowid = rowid;
76340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->nEq = nEq;
76341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->nLt = nLt;
76342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->nDLt = nDLt;
76343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->iHash = h;
76344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->isPSample = isPSample;
76345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Find the new minimum */
76347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nSample==p->mxSample ){
76348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample = p->a;
76349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i = 0;
76350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( pSample->isPSample ){
76351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i++;
76352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample++;
76353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( i<p->nSample );
76354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nEq = pSample->nEq;
76356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ h = pSample->iHash;
76357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iMin = i;
76358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i++, pSample++; i<p->nSample; i++, pSample++){
76359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSample->isPSample ) continue;
76360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSample->nEq<nEq
76361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (pSample->nEq==nEq && pSample->iHash<h)
76362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
76363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iMin = i;
76364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nEq = pSample->nEq;
76365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ h = pSample->iHash;
76366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->iMin = iMin;
76369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const FuncDef stat3PushFuncdef = {
76372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 5, /* nArg */
76373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_UTF8, /* iPrefEnc */
76374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* flags */
76375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* pUserData */
76376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* pNext */
76377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stat3Push, /* xFunc */
76378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xStep */
76379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xFinalize */
76380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "stat3_push", /* zName */
76381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* pHash */
76382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0 /* pDestructor */
76383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
76384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
76386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Implementation of the stat3_get(P,N,...) SQL function. This routine is
76387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** used to query the results. Content is returned for the Nth sqlite_stat3
76388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** row where N is between 0 and S-1 and S is the number of samples. The
76389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value returned depends on the number of arguments.
76390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
76391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argc==2 result: rowid
76392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argc==3 result: nEq
76393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argc==4 result: nLt
76394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argc==5 result: nDLt
76395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
76396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void stat3Get(
76397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *context,
76398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int argc,
76399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value **argv
76400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
76401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = sqlite3_value_int(argv[1]);
76402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Stat3Accum *p = (Stat3Accum*)sqlite3_value_blob(argv[0]);
76403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p!=0 );
76405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nSample<=n ) return;
76406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( argc ){
76407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 2: sqlite3_result_int64(context, p->a[n].iRowid); break;
76408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 3: sqlite3_result_int64(context, p->a[n].nEq); break;
76409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 4: sqlite3_result_int64(context, p->a[n].nLt); break;
76410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case 5: sqlite3_result_int64(context, p->a[n].nDLt); break;
76411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const FuncDef stat3GetFuncdef = {
76414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ -1, /* nArg */
76415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_UTF8, /* iPrefEnc */
76416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* flags */
76417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* pUserData */
76418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* pNext */
76419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ stat3Get, /* xFunc */
76420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xStep */
76421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* xFinalize */
76422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "stat3_get", /* zName */
76423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* pHash */
76424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0 /* pDestructor */
76425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
76426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_ENABLE_STAT3 */
76427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76013 76430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76014 76431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
76015 76432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code to do an analysis of all indices associated with
76016 76433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a single table.
76017 76434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -76031,24 +76448,31 @@
76031 76448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int endOfLoop; /* The end of the loop */
76032 76449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int jZeroRows = -1; /* Jump from here if number of rows is zero */
76033 76450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb; /* Index of database containing pTab */
76034 76451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regTabname = iMem++; /* Register containing table name */
76035 76452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regIdxname = iMem++; /* Register containing index name */
76036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regSampleno = iMem++; /* Register containing next sample number */
76037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regCol = iMem++; /* Content of a column analyzed table */
76453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regStat1 = iMem++; /* The stat column of sqlite_stat1 */
76454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
76455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regNumEq = regStat1; /* Number of instances. Same as regStat1 */
76456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regNumLt = iMem++; /* Number of keys less than regSample */
76457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regNumDLt = iMem++; /* Number of distinct keys less than regSample */
76458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regSample = iMem++; /* The next sample value */
76459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regRowid = regSample; /* Rowid of a sample */
76460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regAccum = iMem++; /* Register to hold Stat3Accum object */
76461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regLoop = iMem++; /* Loop counter */
76462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regCount = iMem++; /* Number of rows in the table or index */
76463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regTemp1 = iMem++; /* Intermediate register */
76464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regTemp2 = iMem++; /* Intermediate register */
76465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int once = 1; /* One-time initialization */
76466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int shortJump = 0; /* Instruction address */
76467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iTabCur = pParse->nTab++; /* Table cursor */
76468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
76469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regCol = iMem++; /* Content of a column in analyzed table */
76038 76470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regRec = iMem++; /* Register holding completed record */
76039 76471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regTemp = iMem++; /* Temporary use register */
76040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regRowid = iMem++; /* Rowid for the inserted record */
76041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
76043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addr = 0; /* Instruction address */
76044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regTemp2 = iMem++; /* Temporary use register */
76045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regSamplerecno = iMem++; /* Index of next sample to record */
76046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regRecno = iMem++; /* Current sample index */
76047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regLast = iMem++; /* Index of last sample to record */
76048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int regFirst = iMem++; /* Index of first sample to record */
76049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
76472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regNewRowid = iMem++; /* Rowid for the inserted record */
76473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76050 76474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76051 76475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = sqlite3GetVdbe(pParse);
76052 76476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( v==0 || NEVER(pTab==0) ){
76053 76477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
76054 76478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -76077,17 +76501,22 @@
76077 76501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iIdxCur = pParse->nTab++;
76078 76502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_String8, 0, regTabname, 0, pTab->zName, 0);
76079 76503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
76080 76504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCol;
76081 76505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKey;
76506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrIfNot = 0; /* address of OP_IfNot */
76507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *aChngAddr; /* Array of jump instruction addresses */
76082 76508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76083 76509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOnlyIdx && pOnlyIdx!=pIdx ) continue;
76510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeNoopComment((v, "Begin analysis of %s", pIdx->zName));
76084 76511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCol = pIdx->nColumn;
76085 76512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pKey = sqlite3IndexKeyinfo(pParse, pIdx);
76086 76513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iMem+1+(nCol*2)>pParse->nMem ){
76087 76514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nMem = iMem+1+(nCol*2);
76088 76515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aChngAddr = sqlite3DbMallocRaw(db, sizeof(int)*pIdx->nColumn);
76517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aChngAddr==0 ) continue;
76089 76518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76090 76519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Open a cursor to the index to be analyzed. */
76091 76520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) );
76092 76521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb,
76093 76522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(char *)pKey, P4_KEYINFO_HANDOFF);
@@ -76094,35 +76523,24 @@
76094 76523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%s", pIdx->zName));
76095 76524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76096 76525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Populate the register containing the index name. */
76097 76526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_String8, 0, regIdxname, 0, pIdx->zName, 0);
76098 76527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
76100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If this iteration of the loop is generating code to analyze the
76102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** first index in the pTab->pIndex list, then register regLast has
76103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** not been populated. In this case populate it now. */
76104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pTab->pIndex==pIdx ){
76105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES, regSamplerecno);
76106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES*2-1, regTemp);
76107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES*2, regTemp2);
76108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regLast);
76110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Null, 0, regFirst);
76111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addr = sqlite3VdbeAddOp3(v, OP_Lt, regSamplerecno, 0, regLast);
76112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Divide, regTemp2, regLast, regFirst);
76113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Multiply, regLast, regTemp, regLast);
76114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_AddImm, regLast, SQLITE_INDEX_SAMPLES*2-2);
76115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Divide, regTemp2, regLast, regLast);
76116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, addr);
76117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Zero the regSampleno and regRecno registers. */
76120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, 0, regSampleno);
76121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, 0, regRecno);
76122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Copy, regFirst, regSamplerecno);
76123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
76528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
76529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( once ){
76530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ once = 0;
76531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead);
76532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regCount);
76534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_STAT3_SAMPLES, regTemp1);
76535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, regNumEq);
76536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, regNumLt);
76537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, -1, regNumDLt);
76538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_Function, 1, regCount, regAccum,
76539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (char*)&stat3InitFuncdef, P4_FUNCDEF);
76540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, 2);
76541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_ENABLE_STAT3 */
76124 76542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76125 76543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The block of memory cells initialized here is used as follows.
76126 76544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
76127 76545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** iMem:
76128 76546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The total number of rows in the table.
@@ -76148,79 +76566,87 @@
76148 76566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Start the analysis loop. This loop runs through all the entries in
76149 76567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the index b-tree. */
76150 76568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
endOfLoop = sqlite3VdbeMakeLabel(v);
76151 76569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Rewind, iIdxCur, endOfLoop);
76152 76570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
topOfLoop = sqlite3VdbeCurrentAddr(v);
76153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_AddImm, iMem, 1);
76571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_AddImm, iMem, 1); /* Increment row counter */
76154 76572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76155 76573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nCol; i++){
76156 76574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CollSeq *pColl;
76157 76575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regCol);
76158 76576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i==0 ){
76159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
76160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Check if the record that cursor iIdxCur points to contains a
76161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** value that should be stored in the sqlite_stat2 table. If so,
76162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** store it. */
76163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int ne = sqlite3VdbeAddOp3(v, OP_Ne, regRecno, 0, regSamplerecno);
76164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( regTabname+1==regIdxname
76165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && regTabname+2==regSampleno
76166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && regTabname+3==regCol
76167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
76168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
76169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 4, regRec, "aaab", 0);
76170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur+1, regRowid);
76171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Insert, iStatCur+1, regRec, regRowid);
76172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Calculate new values for regSamplerecno and regSampleno.
76174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
76175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sampleno = sampleno + 1
76176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** samplerecno = samplerecno+(remaining records)/(remaining samples)
76177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
76178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_AddImm, regSampleno, 1);
76179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Subtract, regRecno, regLast, regTemp);
76180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_AddImm, regTemp, -1);
76181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_INDEX_SAMPLES, regTemp2);
76182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Subtract, regSampleno, regTemp2, regTemp2);
76183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Divide, regTemp2, regTemp, regTemp);
76184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Add, regSamplerecno, regTemp, regSamplerecno);
76185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, ne);
76187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_AddImm, regRecno, 1);
76188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
76189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76190 76577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Always record the very first row */
76191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp1(v, OP_IfNot, iMem+1);
76578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addrIfNot = sqlite3VdbeAddOp1(v, OP_IfNot, iMem+1);
76192 76579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76193 76580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIdx->azColl!=0 );
76194 76581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIdx->azColl[i]!=0 );
76195 76582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pColl = sqlite3LocateCollSeq(pParse, pIdx->azColl[i]);
76196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_Ne, regCol, 0, iMem+nCol+i+1,
76197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (char*)pColl, P4_COLLSEQ);
76583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aChngAddr[i] = sqlite3VdbeAddOp4(v, OP_Ne, regCol, 0, iMem+nCol+i+1,
76584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (char*)pColl, P4_COLLSEQ);
76198 76585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
76199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( db->mallocFailed ){
76201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If a malloc failure has occurred, then the result of the expression
76202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** passed as the second argument to the call to sqlite3VdbeJumpHere()
76203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** below may be negative. Which causes an assert() to fail (or an
76204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** out-of-bounds write if SQLITE_DEBUG is not defined). */
76205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
76586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeComment((v, "jump if column %d changed", i));
76587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
76588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i==0 ){
76589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_AddImm, regNumEq, 1);
76590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeComment((v, "incr repeat count"));
76591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
76206 76593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76207 76594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Goto, 0, endOfLoop);
76208 76595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nCol; i++){
76209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addr2 = sqlite3VdbeCurrentAddr(v) - (nCol*2);
76596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, aChngAddr[i]); /* Set jump dest for the OP_Ne */
76210 76597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i==0 ){
76211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, addr2-1); /* Set jump dest for the OP_IfNot */
76598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, addrIfNot); /* Jump dest for OP_IfNot */
76599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
76600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_Function, 1, regNumEq, regTemp2,
76601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (char*)&stat3PushFuncdef, P4_FUNCDEF);
76602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, 5);
76603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, pIdx->nColumn, regRowid);
76604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Add, regNumEq, regNumLt, regNumLt);
76605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_AddImm, regNumDLt, 1);
76606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, 1, regNumEq);
76607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
76212 76608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, addr2); /* Set jump dest for the OP_Ne */
76214 76609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_AddImm, iMem+i+1, 1);
76215 76610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, iMem+nCol+i+1);
76216 76611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, aChngAddr);
76217 76613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* End of the analysis loop. */
76614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Always jump here after updating the iMem+1...iMem+1+nCol counters */
76219 76615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeResolveLabel(v, endOfLoop);
76616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76220 76617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Next, iIdxCur, topOfLoop);
76221 76618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
76619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
76620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_Function, 1, regNumEq, regTemp2,
76621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (char*)&stat3PushFuncdef, P4_FUNCDEF);
76622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, 5);
76623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, -1, regLoop);
76624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ shortJump =
76625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_AddImm, regLoop, 1);
76626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regTemp1,
76627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (char*)&stat3GetFuncdef, P4_FUNCDEF);
76628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, 2);
76629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp1(v, OP_IsNull, regTemp1);
76630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_NotExists, iTabCur, shortJump, regTemp1);
76631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Column, iTabCur, pIdx->aiColumn[0], regSample);
76632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ColumnDefault(v, pTab, pIdx->aiColumn[0], regSample);
76633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumEq,
76634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (char*)&stat3GetFuncdef, P4_FUNCDEF);
76635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, 3);
76636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumLt,
76637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (char*)&stat3GetFuncdef, P4_FUNCDEF);
76638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, 4);
76639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumDLt,
76640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (char*)&stat3GetFuncdef, P4_FUNCDEF);
76641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, 5);
76642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 6, regRec, "bbbbbb", 0);
76643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur+1, regNewRowid);
76644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Insert, iStatCur+1, regRec, regNewRowid);
76645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, shortJump);
76646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, shortJump+2);
76647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
76222 76648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76223 76649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Store the results in sqlite_stat1.
76224 76650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
76225 76651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The result is a single row of the sqlite_stat1 table. The first
76226 76652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** two columns are the names of the table and index. The third column
@@ -76236,50 +76662,51 @@
76236 76662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
76237 76663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If K==0 then no entry is made into the sqlite_stat1 table.
76238 76664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If K>0 then it is always the case the D>0 so division by zero
76239 76665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is never possible.
76240 76666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regSampleno);
76667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regStat1);
76242 76668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( jZeroRows<0 ){
76243 76669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, iMem);
76244 76670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76245 76671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nCol; i++){
76246 76672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_String8, 0, regTemp, 0, " ", 0);
76247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regSampleno, regSampleno);
76673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regStat1, regStat1);
76248 76674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Add, iMem, iMem+i+1, regTemp);
76249 76675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_AddImm, regTemp, -1);
76250 76676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Divide, iMem+i+1, regTemp, regTemp);
76251 76677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_ToInt, regTemp);
76252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regSampleno, regSampleno);
76678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regStat1, regStat1);
76253 76679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76254 76680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
76255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regRowid);
76256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regRowid);
76681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
76682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regNewRowid);
76257 76683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
76258 76684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76259 76685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76260 76686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the table has no indices, create a single sqlite_stat1 entry
76261 76687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** containing NULL as the index name and the row count as the content.
76262 76688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76263 76689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab->pIndex==0 ){
76264 76690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pTab->tnum, iDb);
76265 76691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%s", pTab->zName));
76266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regSampleno);
76692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regStat1);
76267 76693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
76268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regSampleno);
76694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1);
76269 76695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
76270 76696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, jZeroRows);
76271 76697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
jZeroRows = sqlite3VdbeAddOp0(v, OP_Goto);
76272 76698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76273 76699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname);
76274 76700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
76275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regRowid);
76276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regRowid);
76701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
76702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regNewRowid);
76277 76703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
76278 76704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nMem<regRec ) pParse->nMem = regRec;
76279 76705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, jZeroRows);
76280 76706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76281 76708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76282 76709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
76283 76710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code that will cause the most recent index analysis to
76284 76711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be loaded into internal hash tables where is can be used.
76285 76712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -76300,11 +76727,11 @@
76300 76727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iStatCur;
76301 76728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iMem;
76302 76729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76303 76730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BeginWriteOperation(pParse, 0, iDb);
76304 76731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iStatCur = pParse->nTab;
76305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->nTab += 2;
76732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->nTab += 3;
76306 76733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
openStatTable(pParse, iDb, iStatCur, 0, 0);
76307 76734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iMem = pParse->nMem+1;
76308 76735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
76309 76736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){
76310 76737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab = (Table*)sqliteHashData(k);
@@ -76325,11 +76752,11 @@
76325 76752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
76326 76753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
76327 76754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
76328 76755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BeginWriteOperation(pParse, 0, iDb);
76329 76756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iStatCur = pParse->nTab;
76330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->nTab += 2;
76757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->nTab += 3;
76331 76758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOnlyIdx ){
76332 76759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
openStatTable(pParse, iDb, iStatCur, pOnlyIdx->zName, "idx");
76333 76760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
76334 76761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
openStatTable(pParse, iDb, iStatCur, pTab->zName, "tbl");
76335 76762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -76430,11 +76857,11 @@
76430 76857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){
76431 76858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
analysisInfo *pInfo = (analysisInfo*)pData;
76432 76859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIndex;
76433 76860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTable;
76434 76861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, c, n;
76435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned int v;
76862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt v;
76436 76863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z;
76437 76864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76438 76865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( argc==3 );
76439 76866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER2(NotUsed, argc);
76440 76867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -76473,40 +76900,172 @@
76473 76900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
76474 76901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the Index.aSample variable is not NULL, delete the aSample[] array
76475 76902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and its contents.
76476 76903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76477 76904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){
76478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
76905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
76479 76906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIdx->aSample ){
76480 76907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int j;
76481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(j=0; j<SQLITE_INDEX_SAMPLES; j++){
76908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(j=0; j<pIdx->nSample; j++){
76482 76909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
IndexSample *p = &pIdx->aSample[j];
76483 76910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->eType==SQLITE_TEXT || p->eType==SQLITE_BLOB ){
76484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, p->u.z);
76911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(p->u.z);
76485 76912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76486 76913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, pIdx->aSample);
76914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pIdx->aSample);
76488 76915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(db);
76917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx->nSample = 0;
76918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx->aSample = 0;
76489 76919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
76490 76920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(db);
76491 76921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(pIdx);
76492 76922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
76493 76923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76494 76924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
76495 76926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
76496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Load the content of the sqlite_stat1 and sqlite_stat2 tables. The
76927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Load content from the sqlite_stat3 table into the Index.aSample[]
76928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** arrays of all indices.
76929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
76930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int loadStat3(sqlite3 *db, const char *zDb){
76931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc; /* Result codes from subroutines */
76932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_stmt *pStmt = 0; /* An SQL statement being run */
76933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zSql; /* Text of the SQL statement */
76934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Index *pPrevIdx = 0; /* Previous index in the loop */
76935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int idx = 0; /* slot in pIdx->aSample[] for next sample */
76936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int eType; /* Datatype of a sample */
76937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IndexSample *pSample; /* A slot in pIdx->aSample[] */
76938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !sqlite3FindTable(db, "sqlite_stat3", zDb) ){
76940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
76941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zSql = sqlite3MPrintf(db,
76944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SELECT idx,count(*) FROM %Q.sqlite_stat3"
76945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " GROUP BY idx", zDb);
76946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !zSql ){
76947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_NOMEM;
76948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
76950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, zSql);
76951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc ) return rc;
76952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( sqlite3_step(pStmt)==SQLITE_ROW ){
76954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zIndex; /* Index name */
76955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Index *pIdx; /* Pointer to the index object */
76956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nSample; /* Number of samples */
76957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zIndex = (char *)sqlite3_column_text(pStmt, 0);
76959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zIndex==0 ) continue;
76960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nSample = sqlite3_column_int(pStmt, 1);
76961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nSample>255 ) continue;
76962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx = sqlite3FindIndex(db, zIndex, zDb);
76963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx==0 ) continue;
76964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pIdx->nSample==0 );
76965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx->nSample = (u8)nSample;
76966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx->aSample = sqlite3MallocZero( nSample*sizeof(IndexSample) );
76967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx->avgEq = pIdx->aiRowEst[1];
76968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx->aSample==0 ){
76969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db->mallocFailed = 1;
76970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_finalize(pStmt);
76971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_NOMEM;
76972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_finalize(pStmt);
76975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zSql = sqlite3MPrintf(db,
76977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SELECT idx,neq,nlt,ndlt,sample FROM %Q.sqlite_stat3", zDb);
76978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !zSql ){
76979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_NOMEM;
76980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
76981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
76982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, zSql);
76983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc ) return rc;
76984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( sqlite3_step(pStmt)==SQLITE_ROW ){
76986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zIndex; /* Index name */
76987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Index *pIdx; /* Pointer to the index object */
76988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Loop counter */
76989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt sumEq; /* Sum of the nEq values */
76990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
76991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zIndex = (char *)sqlite3_column_text(pStmt, 0);
76992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zIndex==0 ) continue;
76993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx = sqlite3FindIndex(db, zIndex, zDb);
76994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx==0 ) continue;
76995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx==pPrevIdx ){
76996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ idx++;
76997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
76998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPrevIdx = pIdx;
76999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ idx = 0;
77000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( idx<pIdx->nSample );
77002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample = &pIdx->aSample[idx];
77003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->nEq = (tRowcnt)sqlite3_column_int64(pStmt, 1);
77004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->nLt = (tRowcnt)sqlite3_column_int64(pStmt, 2);
77005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->nDLt = (tRowcnt)sqlite3_column_int64(pStmt, 3);
77006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( idx==pIdx->nSample-1 ){
77007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSample->nDLt>0 ){
77008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0, sumEq=0; i<=idx-1; i++) sumEq += pIdx->aSample[i].nEq;
77009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx->avgEq = (pSample->nLt - sumEq)/pSample->nDLt;
77010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx->avgEq<=0 ) pIdx->avgEq = 1;
77012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eType = sqlite3_column_type(pStmt, 4);
77014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->eType = (u8)eType;
77015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( eType ){
77016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_INTEGER: {
77017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->u.i = sqlite3_column_int64(pStmt, 4);
77018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
77019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_FLOAT: {
77021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->u.r = sqlite3_column_double(pStmt, 4);
77022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
77023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_NULL: {
77025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
77026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ default: assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB ); {
77028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *z = (const char *)(
77029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (eType==SQLITE_BLOB) ?
77030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_column_blob(pStmt, 4):
77031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_column_text(pStmt, 4)
77032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
77033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = sqlite3_column_bytes(pStmt, 4);
77034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n>0xffff ) n = 0xffff;
77035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->nByte = (u16)n;
77036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n < 1){
77037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->u.z = 0;
77038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
77039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSample->u.z = sqlite3Malloc(n);
77040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSample->u.z==0 ){
77041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db->mallocFailed = 1;
77042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_finalize(pStmt);
77043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_NOMEM;
77044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(pSample->u.z, z, n);
77046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3_finalize(pStmt);
77051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
77052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_ENABLE_STAT3 */
77053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
77054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
77055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Load the content of the sqlite_stat1 and sqlite_stat3 tables. The
76497 77056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** contents of sqlite_stat1 are used to populate the Index.aiRowEst[]
76498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** arrays. The contents of sqlite_stat2 are used to populate the
77057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** arrays. The contents of sqlite_stat3 are used to populate the
76499 77058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Index.aSample[] arrays.
76500 77059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
76501 77060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the sqlite_stat1 table is not present in the database, SQLITE_ERROR
76502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is returned. In this case, even if SQLITE_ENABLE_STAT2 was defined
76503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** during compilation and the sqlite_stat2 table is present, no data is
77061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is returned. In this case, even if SQLITE_ENABLE_STAT3 was defined
77062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** during compilation and the sqlite_stat3 table is present, no data is
76504 77063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** read from it.
76505 77064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
76506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If SQLITE_ENABLE_STAT2 was defined during compilation and the
76507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite_stat2 table is not present in the database, SQLITE_ERROR is
77065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If SQLITE_ENABLE_STAT3 was defined during compilation and the
77066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite_stat3 table is not present in the database, SQLITE_ERROR is
76508 77067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** returned. However, in this case, data is read from the sqlite_stat1
76509 77068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table (if it is present) before returning.
76510 77069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
76511 77070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If an OOM error occurs, this function always sets db->mallocFailed.
76512 77071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This means if the caller does not care about other errors, the return
@@ -76524,12 +77083,14 @@
76524 77083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Clear any prior statistics */
76525 77084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
76526 77085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=sqliteHashFirst(&db->aDb[iDb].pSchema->idxHash);i;i=sqliteHashNext(i)){
76527 77086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx = sqliteHashData(i);
76528 77087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DefaultRowEst(pIdx);
77088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
76529 77089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DeleteIndexSamples(db, pIdx);
76530 77090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdx->aSample = 0;
77091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
76531 77092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76532 77093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76533 77094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check to make sure the sqlite_stat1 table exists */
76534 77095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sInfo.db = db;
76535 77096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sInfo.zDatabase = db->aDb[iDb].zName;
@@ -76537,91 +77098,23 @@
76537 77098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_ERROR;
76538 77099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76539 77100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76540 77101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Load new statistics out of the sqlite_stat1 table */
76541 77102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zSql = sqlite3MPrintf(db,
76542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "SELECT tbl, idx, stat FROM %Q.sqlite_stat1", sInfo.zDatabase);
77103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SELECT tbl,idx,stat FROM %Q.sqlite_stat1", sInfo.zDatabase);
76543 77104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zSql==0 ){
76544 77105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
76545 77106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
76546 77107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_exec(db, zSql, analysisLoader, &sInfo, 0);
76547 77108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, zSql);
76548 77109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76549 77110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76550 77111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Load the statistics from the sqlite_stat2 table. */
76552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
76553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK && !sqlite3FindTable(db, "sqlite_stat2", sInfo.zDatabase) ){
76554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_ERROR;
76555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
76557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_stmt *pStmt = 0;
76558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zSql = sqlite3MPrintf(db,
76560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "SELECT idx,sampleno,sample FROM %Q.sqlite_stat2", sInfo.zDatabase);
76561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !zSql ){
76562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_NOMEM;
76563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
76564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
76565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, zSql);
76566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
76569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3_step(pStmt)==SQLITE_ROW ){
76570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zIndex; /* Index name */
76571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Index *pIdx; /* Pointer to the index object */
76572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zIndex = (char *)sqlite3_column_text(pStmt, 0);
76574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIdx = zIndex ? sqlite3FindIndex(db, zIndex, sInfo.zDatabase) : 0;
76575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIdx ){
76576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iSample = sqlite3_column_int(pStmt, 1);
76577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iSample<SQLITE_INDEX_SAMPLES && iSample>=0 ){
76578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int eType = sqlite3_column_type(pStmt, 2);
76579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIdx->aSample==0 ){
76581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const int sz = sizeof(IndexSample)*SQLITE_INDEX_SAMPLES;
76582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIdx->aSample = (IndexSample *)sqlite3DbMallocRaw(0, sz);
76583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIdx->aSample==0 ){
76584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db->mallocFailed = 1;
76585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
76586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(pIdx->aSample, 0, sz);
76588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
76590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pIdx->aSample );
76591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {
76592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- IndexSample *pSample = &pIdx->aSample[iSample];
76593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSample->eType = (u8)eType;
76594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){
76595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSample->u.r = sqlite3_column_double(pStmt, 2);
76596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( eType==SQLITE_TEXT || eType==SQLITE_BLOB ){
76597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *z = (const char *)(
76598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (eType==SQLITE_BLOB) ?
76599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_column_blob(pStmt, 2):
76600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_column_text(pStmt, 2)
76601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
76602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n = sqlite3_column_bytes(pStmt, 2);
76603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n>24 ){
76604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n = 24;
76605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSample->nByte = (u8)n;
76607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n < 1){
76608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSample->u.z = 0;
76609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
76610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSample->u.z = sqlite3DbStrNDup(0, z, n);
76611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSample->u.z==0 ){
76612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db->mallocFailed = 1;
76613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
76614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3_finalize(pStmt);
76622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
77112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Load the statistics from the sqlite_stat3 table. */
77113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
77114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
77115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = loadStat3(db, sInfo.zDatabase);
76623 77116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76624 77117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
76625 77118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76626 77119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_NOMEM ){
76627 77120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->mallocFailed = 1;
@@ -79422,10 +79915,108 @@
79422 79915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDestroyed = iLargest;
79423 79916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79424 79917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79425 79918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
79426 79919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
79922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Remove entries from the sqlite_stat1 and sqlite_stat2 tables
79923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** after a DROP INDEX or DROP TABLE command.
79924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
79925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void sqlite3ClearStatTables(
79926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse, /* The parsing context */
79927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iDb, /* The database number */
79928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zType, /* "idx" or "tbl" */
79929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName /* Name of index or table */
79930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
79931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char *azStatTab[] = {
79932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "sqlite_stat1",
79933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "sqlite_stat2",
79934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "sqlite_stat3",
79935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
79936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
79937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zDbName = pParse->db->aDb[iDb].zName;
79938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<ArraySize(azStatTab); i++){
79939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3FindTable(pParse->db, azStatTab[i], zDbName) ){
79940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3NestedParse(pParse,
79941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "DELETE FROM %Q.%s WHERE %s=%Q",
79942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDbName, azStatTab[i], zType, zName
79943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
79944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
79949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Generate code to drop a table.
79950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
79951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3CodeDropTable(Parse *pParse, Table *pTab, int iDb, int isView){
79952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Vdbe *v;
79953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db = pParse->db;
79954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Trigger *pTrigger;
79955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Db *pDb = &db->aDb[iDb];
79956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ v = sqlite3GetVdbe(pParse);
79958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( v!=0 );
79959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3BeginWriteOperation(pParse, 1, iDb);
79960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_VIRTUALTABLE
79962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( IsVirtual(pTab) ){
79963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp0(v, OP_VBegin);
79964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
79966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Drop all triggers associated with the table being dropped. Code
79968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is generated to remove entries from sqlite_master and/or
79969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite_temp_master if required.
79970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
79971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTrigger = sqlite3TriggerList(pParse, pTab);
79972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( pTrigger ){
79973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pTrigger->pSchema==pTab->pSchema ||
79974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTrigger->pSchema==db->aDb[1].pSchema );
79975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DropTriggerPtr(pParse, pTrigger);
79976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTrigger = pTrigger->pNext;
79977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_AUTOINCREMENT
79980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Remove any entries of the sqlite_sequence table associated with
79981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the table being dropped. This is done before the table is dropped
79982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** at the btree level, in case the sqlite_sequence table needs to
79983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** move as a result of the drop (can happen in auto-vacuum mode).
79984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
79985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTab->tabFlags & TF_Autoincrement ){
79986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3NestedParse(pParse,
79987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "DELETE FROM %Q.sqlite_sequence WHERE name=%Q",
79988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pDb->zName, pTab->zName
79989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
79990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
79992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Drop all SQLITE_MASTER table and index entries that refer to the
79994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table. The program name loops through the master table and deletes
79995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** every row that refers to a table of the same name as the one being
79996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** dropped. Triggers are handled seperately because a trigger can be
79997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** created in the temp database that refers to a table in another
79998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** database.
79999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
80000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3NestedParse(pParse,
80001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "DELETE FROM %Q.%s WHERE tbl_name=%Q and type!='trigger'",
80002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pDb->zName, SCHEMA_TABLE(iDb), pTab->zName);
80003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !isView && !IsVirtual(pTab) ){
80004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ destroyTable(pParse, pTab);
80005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
80007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Remove the table entry from SQLite's internal schema and modify
80008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the schema cookie.
80009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
80010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( IsVirtual(pTab) ){
80011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_VDestroy, iDb, 0, 0, pTab->zName, 0);
80012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0);
80014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ChangeCookie(pParse, iDb);
80015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqliteViewResetAll(db, iDb);
80016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
80017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79427 80018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79428 80019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
79429 80020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is called to do the work of a DROP TABLE statement.
79430 80021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pName is the name of the table to be dropped.
79431 80022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -79491,11 +80082,11 @@
79491 80082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb) ){
79492 80083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto exit_drop_table;
79493 80084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79494 80085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79495 80086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
79496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){
80087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pParse->nested && sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){
79497 80088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName);
79498 80089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto exit_drop_table;
79499 80090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79500 80091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79501 80092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIEW
@@ -79515,79 +80106,15 @@
79515 80106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Generate code to remove the table from the master table
79516 80107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on disk.
79517 80108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79518 80109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = sqlite3GetVdbe(pParse);
79519 80110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( v ){
79520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Trigger *pTrigger;
79521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Db *pDb = &db->aDb[iDb];
79522 80111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BeginWriteOperation(pParse, 1, iDb);
79523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_VIRTUALTABLE
79525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( IsVirtual(pTab) ){
79526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp0(v, OP_VBegin);
79527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
79528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
79529 80112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3FkDropTable(pParse, pName, pTab);
79530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Drop all triggers associated with the table being dropped. Code
79532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is generated to remove entries from sqlite_master and/or
79533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite_temp_master if required.
79534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTrigger = sqlite3TriggerList(pParse, pTab);
79536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( pTrigger ){
79537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pTrigger->pSchema==pTab->pSchema ||
79538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTrigger->pSchema==db->aDb[1].pSchema );
79539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DropTriggerPtr(pParse, pTrigger);
79540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTrigger = pTrigger->pNext;
79541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
79542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_AUTOINCREMENT
79544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Remove any entries of the sqlite_sequence table associated with
79545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the table being dropped. This is done before the table is dropped
79546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** at the btree level, in case the sqlite_sequence table needs to
79547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** move as a result of the drop (can happen in auto-vacuum mode).
79548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pTab->tabFlags & TF_Autoincrement ){
79550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3NestedParse(pParse,
79551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "DELETE FROM %s.sqlite_sequence WHERE name=%Q",
79552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pDb->zName, pTab->zName
79553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
79554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
79555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
79556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Drop all SQLITE_MASTER table and index entries that refer to the
79558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** table. The program name loops through the master table and deletes
79559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** every row that refers to a table of the same name as the one being
79560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** dropped. Triggers are handled seperately because a trigger can be
79561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** created in the temp database that refers to a table in another
79562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** database.
79563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3NestedParse(pParse,
79565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "DELETE FROM %Q.%s WHERE tbl_name=%Q and type!='trigger'",
79566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pDb->zName, SCHEMA_TABLE(iDb), pTab->zName);
79567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Drop any statistics from the sqlite_stat1 table, if it exists */
79569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3FindTable(db, "sqlite_stat1", db->aDb[iDb].zName) ){
79570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3NestedParse(pParse,
79571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "DELETE FROM %Q.sqlite_stat1 WHERE tbl=%Q", pDb->zName, pTab->zName
79572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
79573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
79574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !isView && !IsVirtual(pTab) ){
79576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- destroyTable(pParse, pTab);
79577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
79578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Remove the table entry from SQLite's internal schema and modify
79580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the schema cookie.
79581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( IsVirtual(pTab) ){
79583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_VDestroy, iDb, 0, 0, pTab->zName, 0);
79584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
79585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0);
79586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ChangeCookie(pParse, iDb);
79587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
79588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqliteViewResetAll(db, iDb);
80113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3CodeDropTable(pParse, pTab, iDb, isView);
80114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ClearStatTables(pParse, iDb, "tbl", pTab->zName);
80115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79589 80116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79590 80117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
exit_drop_table:
79591 80118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SrcListDelete(db, pName);
79592 80119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79593 80120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -80030,24 +80557,24 @@
80030 80557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
80031 80558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nName = sqlite3Strlen30(zName);
80032 80559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCol = pList->nExpr;
80033 80560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIndex = sqlite3DbMallocZero(db,
80034 80561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sizeof(Index) + /* Index structure */
80562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sizeof(tRowcnt)*(nCol+1) + /* Index.aiRowEst */
80035 80563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sizeof(int)*nCol + /* Index.aiColumn */
80036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sizeof(int)*(nCol+1) + /* Index.aiRowEst */
80037 80564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sizeof(char *)*nCol + /* Index.azColl */
80038 80565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sizeof(u8)*nCol + /* Index.aSortOrder */
80039 80566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nName + 1 + /* Index.zName */
80040 80567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nExtra /* Collation sequence names */
80041 80568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
80042 80569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
80043 80570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto exit_create_index;
80044 80571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
80045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIndex->azColl = (char**)(&pIndex[1]);
80572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIndex->aiRowEst = (tRowcnt*)(&pIndex[1]);
80573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIndex->azColl = (char**)(&pIndex->aiRowEst[nCol+1]);
80046 80574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIndex->aiColumn = (int *)(&pIndex->azColl[nCol]);
80047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIndex->aiRowEst = (unsigned *)(&pIndex->aiColumn[nCol]);
80048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIndex->aSortOrder = (u8 *)(&pIndex->aiRowEst[nCol+1]);
80575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIndex->aSortOrder = (u8 *)(&pIndex->aiColumn[nCol]);
80049 80576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIndex->zName = (char *)(&pIndex->aSortOrder[nCol]);
80050 80577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zExtra = (char *)(&pIndex->zName[nName+1]);
80051 80578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pIndex->zName, zName, nName+1);
80052 80579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIndex->pTable = pTab;
80053 80580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIndex->nColumn = pList->nExpr;
@@ -80320,13 +80847,13 @@
80320 80847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Apart from that, we have little to go on besides intuition as to
80321 80848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** how aiRowEst[] should be initialized. The numbers generated here
80322 80849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are based on typical values found in actual indices.
80323 80850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
80324 80851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){
80325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned *a = pIdx->aiRowEst;
80852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt *a = pIdx->aiRowEst;
80326 80853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
80327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned n;
80854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt n;
80328 80855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( a!=0 );
80329 80856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a[0] = pIdx->pTable->nRowEst;
80330 80857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( a[0]<10 ) a[0] = 10;
80331 80858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = 10;
80332 80859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=1; i<=pIdx->nColumn; i++){
@@ -80392,19 +80919,13 @@
80392 80919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = sqlite3GetVdbe(pParse);
80393 80920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( v ){
80394 80921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BeginWriteOperation(pParse, 1, iDb);
80395 80922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3NestedParse(pParse,
80396 80923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"DELETE FROM %Q.%s WHERE name=%Q AND type='index'",
80397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
80398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIndex->zName
80399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
80400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3FindTable(db, "sqlite_stat1", db->aDb[iDb].zName) ){
80401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3NestedParse(pParse,
80402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "DELETE FROM %Q.sqlite_stat1 WHERE idx=%Q",
80403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db->aDb[iDb].zName, pIndex->zName
80404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
80405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
80924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db->aDb[iDb].zName, SCHEMA_TABLE(iDb), pIndex->zName
80925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
80926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ClearStatTables(pParse, iDb, "idx", pIndex->zName);
80406 80927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ChangeCookie(pParse, iDb);
80407 80928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
destroyRootPage(pParse, pIndex->tnum, iDb);
80408 80929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_DropIndex, iDb, 0, 0, pIndex->zName, 0);
80409 80930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
80410 80931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -98638,11 +99159,11 @@
98638 99159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TERM_CODED 0x04 /* This term is already coded */
98639 99160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TERM_COPIED 0x08 /* Has a child */
98640 99161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TERM_ORINFO 0x10 /* Need to free the WhereTerm.u.pOrInfo object */
98641 99162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TERM_ANDINFO 0x20 /* Need to free the WhereTerm.u.pAndInfo obj */
98642 99163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TERM_OR_OK 0x40 /* Used during OR-clause processing */
98643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
99164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
98644 99165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define TERM_VNULL 0x80 /* Manufactured x>NULL or x<=NULL term */
98645 99166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
98646 99167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define TERM_VNULL 0x00 /* Disabled if not using stat2 */
98647 99168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
98648 99169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -99852,11 +100373,11 @@
99852 100373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewTerm->prereqAll = pTerm->prereqAll;
99853 100374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99854 100375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99855 100376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_VIRTUALTABLE */
99856 100377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
99857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
100378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
99858 100379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* When sqlite_stat2 histogram data is available an operator of the
99859 100380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** form "x IS NOT NULL" can sometimes be evaluated more efficiently
99860 100381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as "x>NULL" if x is not an INTEGER PRIMARY KEY. So construct a
99861 100382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** virtual term of that form.
99862 100383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -99891,11 +100412,11 @@
99891 100412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm->nChild = 1;
99892 100413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm->wtFlags |= TERM_COPIED;
99893 100414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewTerm->prereqAll = pTerm->prereqAll;
99894 100415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99895 100416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* SQLITE_ENABLE_STAT2 */
100417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_ENABLE_STAT */
99897 100418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
99898 100419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Prevent ON clause terms of a LEFT JOIN from being used to drive
99899 100420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an index for tables to the left of the join.
99900 100421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
99901 100422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm->prereqRight |= extraRight;
@@ -100662,10 +101183,11 @@
100662 101183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->leftCursor != pSrc->iCursor ) continue;
100663 101184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
100664 101185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTerm->eOperator==WO_IN );
100665 101186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTerm->eOperator==WO_ISNULL );
100666 101187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
101188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm->wtFlags & TERM_VNULL ) continue;
100667 101189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nTerm++;
100668 101190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100669 101191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100670 101192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the ORDER BY clause contains only columns in the current
100671 101193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** virtual table then allocate space for the aOrderBy part of
@@ -100712,10 +101234,11 @@
100712 101234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->leftCursor != pSrc->iCursor ) continue;
100713 101235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
100714 101236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTerm->eOperator==WO_IN );
100715 101237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTerm->eOperator==WO_ISNULL );
100716 101238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
101239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm->wtFlags & TERM_VNULL ) continue;
100717 101240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxCons[j].iColumn = pTerm->u.leftColumn;
100718 101241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxCons[j].iTermOffset = i;
100719 101242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxCons[j].op = (u8)pTerm->eOperator;
100720 101243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The direct assignment in the previous line is possible only because
100721 101244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical. The
@@ -100938,71 +101461,89 @@
100938 101461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
100939 101462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
100940 101463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100941 101464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_VIRTUALTABLE */
100942 101465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
100943 101467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
100944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Argument pIdx is a pointer to an index structure that has an array of
100945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLITE_INDEX_SAMPLES evenly spaced samples of the first indexed column
100946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** stored in Index.aSample. These samples divide the domain of values stored
100947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the index into (SQLITE_INDEX_SAMPLES+1) regions.
100948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Region 0 contains all values less than the first sample value. Region
100949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 1 contains values between the first and second samples. Region 2 contains
100950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** values between samples 2 and 3. And so on. Region SQLITE_INDEX_SAMPLES
100951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** contains values larger than the last sample.
100952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
100953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the index contains many duplicates of a single value, then it is
100954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** possible that two or more adjacent samples can hold the same value.
100955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** When that is the case, the smallest possible region code is returned
100956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** when roundUp is false and the largest possible region code is returned
100957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** when roundUp is true.
100958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
100959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If successful, this function determines which of the regions value
100960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pVal lies in, sets *piRegion to the region index (a value between 0
100961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and SQLITE_INDEX_SAMPLES+1, inclusive) and returns SQLITE_OK.
100962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Or, if an OOM occurs while converting text values between encodings,
100963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLITE_NOMEM is returned and *piRegion is undefined.
100964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
100965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
100966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int whereRangeRegion(
101468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Estimate the location of a particular key among all keys in an
101469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** index. Store the results in aStat as follows:
101470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aStat[0] Est. number of rows less than pVal
101472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aStat[1] Est. number of rows equal to pVal
101473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return SQLITE_OK on success.
101475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
101476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int whereKeyStats(
100967 101477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* Database connection */
100968 101478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx, /* Index to consider domain of */
100969 101479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value *pVal, /* Value to consider */
100970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int roundUp, /* Return largest valid region if true */
100971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *piRegion /* OUT: Region of domain in which value lies */
101480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int roundUp, /* Round up if true. Round down if false */
101481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt *aStat /* OUT: stats written here */
100972 101482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
101483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt n;
101484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IndexSample *aSample;
101485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, eType;
101486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isEq = 0;
101487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 v;
101488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double r, rS;
101489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
100973 101490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( roundUp==0 || roundUp==1 );
100974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ALWAYS(pVal) ){
100975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- IndexSample *aSample = pIdx->aSample;
100976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i = 0;
100977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int eType = sqlite3_value_type(pVal);
100978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
100979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){
100980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double r = sqlite3_value_double(pVal);
100981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<SQLITE_INDEX_SAMPLES; i++){
100982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( aSample[i].eType==SQLITE_NULL ) continue;
100983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( aSample[i].eType>=SQLITE_TEXT ) break;
100984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( roundUp ){
100985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( aSample[i].u.r>r ) break;
100986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
100987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( aSample[i].u.r>=r ) break;
100988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
100989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
100990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( eType==SQLITE_NULL ){
100991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i = 0;
100992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( roundUp ){
100993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( i<SQLITE_INDEX_SAMPLES && aSample[i].eType==SQLITE_NULL ) i++;
100994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
100995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
101491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pVal==0 ) return SQLITE_ERROR;
101492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = pIdx->aiRowEst[0];
101493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aSample = pIdx->aSample;
101494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i = 0;
101495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eType = sqlite3_value_type(pVal);
101496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eType==SQLITE_INTEGER ){
101498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ v = sqlite3_value_int64(pVal);
101499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r = (i64)v;
101500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pIdx->nSample; i++){
101501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSample[i].eType==SQLITE_NULL ) continue;
101502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSample[i].eType>=SQLITE_TEXT ) break;
101503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSample[i].eType==SQLITE_INTEGER ){
101504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSample[i].u.i>=v ){
101505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isEq = aSample[i].u.i==v;
101506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
101507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
101509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aSample[i].eType==SQLITE_FLOAT );
101510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSample[i].u.r>=r ){
101511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isEq = aSample[i].u.r==r;
101512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
101513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( eType==SQLITE_FLOAT ){
101517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r = sqlite3_value_double(pVal);
101518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pIdx->nSample; i++){
101519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSample[i].eType==SQLITE_NULL ) continue;
101520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSample[i].eType>=SQLITE_TEXT ) break;
101521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSample[i].eType==SQLITE_FLOAT ){
101522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rS = aSample[i].u.r;
101523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
101524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rS = aSample[i].u.i;
101525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rS>=r ){
101527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isEq = rS==r;
101528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
101529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( eType==SQLITE_NULL ){
101532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i = 0;
101533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx->nSample>=1 && aSample[0].eType==SQLITE_NULL ) isEq = 1;
101534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
101535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB );
101536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pIdx->nSample; i++){
101537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSample[i].eType==SQLITE_TEXT || aSample[i].eType==SQLITE_BLOB ){
101538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
101539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i<pIdx->nSample ){
100996 101542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pParse->db;
100997 101543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CollSeq *pColl;
100998 101544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const u8 *z;
100999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n;
101000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* pVal comes from sqlite3ValueFromExpr() so the type cannot be NULL */
101002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB );
101003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101004 101545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eType==SQLITE_BLOB ){
101005 101546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = (const u8 *)sqlite3_value_blob(pVal);
101006 101547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pColl = db->pDfltColl;
101007 101548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pColl->enc==SQLITE_UTF8 );
101008 101549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -101017,16 +101558,16 @@
101017 101558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
101018 101559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101019 101560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( z && pColl && pColl->xCmp );
101020 101561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101021 101562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = sqlite3ValueBytes(pVal, pColl->enc);
101022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<SQLITE_INDEX_SAMPLES; i++){
101563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(; i<pIdx->nSample; i++){
101024 101565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int c;
101025 101566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eSampletype = aSample[i].eType;
101026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( eSampletype==SQLITE_NULL || eSampletype<eType ) continue;
101027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (eSampletype!=eType) ) break;
101567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eSampletype<eType ) continue;
101568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eSampletype!=eType ) break;
101028 101569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_UTF16
101029 101570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pColl->enc!=SQLITE_UTF8 ){
101030 101571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nSample;
101031 101572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zSample = sqlite3Utf8to16(
101032 101573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db, pColl->enc, aSample[i].u.z, aSample[i].nByte, &nSample
@@ -101040,20 +101581,52 @@
101040 101581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
101041 101582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
101042 101583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
101043 101584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
c = pColl->xCmp(pColl->pUser, aSample[i].nByte, aSample[i].u.z, n, z);
101044 101585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( c-roundUp>=0 ) break;
101586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( c>=0 ){
101587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( c==0 ) isEq = 1;
101588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
101589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101046 101590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101047 101591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101048 101593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( i>=0 && i<=SQLITE_INDEX_SAMPLES );
101050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *piRegion = i;
101594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* At this point, aSample[i] is the first sample that is greater than
101595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or equal to pVal. Or if i==pIdx->nSample, then all samples are less
101596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** than pVal. If aSample[i]==pVal, then isEq==1.
101597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
101598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isEq ){
101599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( i<pIdx->nSample );
101600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aStat[0] = aSample[i].nLt;
101601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aStat[1] = aSample[i].nEq;
101602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
101603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt iLower, iUpper, iGap;
101604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i==0 ){
101605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iLower = 0;
101606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iUpper = aSample[0].nLt;
101607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
101608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iUpper = i>=pIdx->nSample ? n : aSample[i].nLt;
101609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iLower = aSample[i-1].nEq + aSample[i-1].nLt;
101610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aStat[1] = pIdx->avgEq;
101612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iLower>=iUpper ){
101613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iGap = 0;
101614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
101615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iGap = iUpper - iLower;
101616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iGap>=aStat[1]/2 ) iGap -= aStat[1]/2;
101617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( roundUp ){
101619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iGap = (iGap*2)/3;
101620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
101621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iGap = iGap/3;
101622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aStat[0] = iLower + iGap;
101051 101624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101052 101625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
101053 101626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* #ifdef SQLITE_ENABLE_STAT2 */
101627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_ENABLE_STAT3 */
101055 101628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101056 101629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
101057 101630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If expression pExpr represents a literal value, set *pp to point to
101058 101631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an sqlite3_value structure containing the same value, with affinity
101059 101632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** aff applied to it, before returning. It is the responsibility of the
@@ -101067,11 +101640,11 @@
101067 101640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
101068 101641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If neither of the above apply, set *pp to NULL.
101069 101642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
101070 101643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If an error occurs, return an error code. Otherwise, SQLITE_OK.
101071 101644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
101072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
101645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
101073 101646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int valueFromExpr(
101074 101647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse,
101075 101648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr,
101076 101649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 aff,
101077 101650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **pp
@@ -101115,106 +101688,92 @@
101115 101688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
101116 101689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ... FROM t1 WHERE a > ? AND a < ? ...
101117 101690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
101118 101691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then nEq should be passed 0.
101119 101692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
101120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The returned value is an integer between 1 and 100, inclusive. A return
101121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** value of 1 indicates that the proposed range scan is expected to visit
101122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** approximately 1/100th (1%) of the rows selected by the nEq equality
101123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** constraints (if any). A return value of 100 indicates that it is expected
101124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that the range scan will visit every row (100%) selected by the equality
101125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** constraints.
101693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The returned value is an integer divisor to reduce the estimated
101694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** search space. A return value of 1 means that range constraints are
101695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** no help at all. A return value of 2 means range constraints are
101696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expected to reduce the search space by half. And so forth...
101126 101697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
101127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** In the absence of sqlite_stat2 ANALYZE data, each range inequality
101128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** reduces the search space by 3/4ths. Hence a single constraint (x>?)
101129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** results in a return of 25 and a range constraint (x>? AND x<?) results
101130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in a return of 6.
101698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In the absence of sqlite_stat3 ANALYZE data, each range inequality
101699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** reduces the search space by a factor of 4. Hence a single constraint (x>?)
101700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** results in a return of 4 and a range constraint (x>? AND x<?) results
101701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in a return of 16.
101131 101702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
101132 101703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int whereRangeScanEst(
101133 101704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* Parsing & code generating context */
101134 101705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *p, /* The index containing the range-compared column; "x" */
101135 101706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nEq, /* index into p->aCol[] of the range-compared column */
101136 101707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pLower, /* Lower bound on the range. ex: "x>123" Might be NULL */
101137 101708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pUpper, /* Upper bound on the range. ex: "x<455" Might be NULL */
101138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *piEst /* OUT: Return value */
101709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double *pRangeDiv /* OUT: Reduce search space by this divisor */
101139 101710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
101140 101711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
101141 101712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
101143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nEq==0 && p->aSample ){
101145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_value *pLowerVal = 0;
101146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_value *pUpperVal = 0;
101147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iEst;
101148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iLower = 0;
101149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iUpper = SQLITE_INDEX_SAMPLES;
101150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int roundUpUpper = 0;
101151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int roundUpLower = 0;
101713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
101714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nEq==0 && p->nSample ){
101716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value *pRangeVal;
101717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt iLower = 0;
101718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt iUpper = p->aiRowEst[0];
101719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt a[2];
101152 101720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 aff = p->pTable->aCol[p->aiColumn[0]].affinity;
101153 101721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101154 101722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLower ){
101155 101723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr = pLower->pExpr->pRight;
101156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = valueFromExpr(pParse, pExpr, aff, &pLowerVal);
101724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = valueFromExpr(pParse, pExpr, aff, &pRangeVal);
101157 101725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pLower->eOperator==WO_GT || pLower->eOperator==WO_GE );
101158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- roundUpLower = (pLower->eOperator==WO_GT) ?1:0;
101726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK
101727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && whereKeyStats(pParse, p, pRangeVal, 0, a)==SQLITE_OK
101728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
101729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iLower = a[0];
101730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pLower->eOperator==WO_GT ) iLower += a[1];
101731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ValueFree(pRangeVal);
101159 101733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101160 101734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && pUpper ){
101161 101735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr = pUpper->pExpr->pRight;
101162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = valueFromExpr(pParse, pExpr, aff, &pUpperVal);
101736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = valueFromExpr(pParse, pExpr, aff, &pRangeVal);
101163 101737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pUpper->eOperator==WO_LT || pUpper->eOperator==WO_LE );
101164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- roundUpUpper = (pUpper->eOperator==WO_LE) ?1:0;
101165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=SQLITE_OK || (pLowerVal==0 && pUpperVal==0) ){
101168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ValueFree(pLowerVal);
101169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ValueFree(pUpperVal);
101170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto range_est_fallback;
101171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pLowerVal==0 ){
101172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = whereRangeRegion(pParse, p, pUpperVal, roundUpUpper, &iUpper);
101173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pLower ) iLower = iUpper/2;
101174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pUpperVal==0 ){
101175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = whereRangeRegion(pParse, p, pLowerVal, roundUpLower, &iLower);
101176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pUpper ) iUpper = (iLower + SQLITE_INDEX_SAMPLES + 1)/2;
101177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
101178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = whereRangeRegion(pParse, p, pUpperVal, roundUpUpper, &iUpper);
101179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
101180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = whereRangeRegion(pParse, p, pLowerVal, roundUpLower, &iLower);
101181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(("range scan regions: %d..%d\n", iLower, iUpper));
101184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iEst = iUpper - iLower;
101186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testcase( iEst==SQLITE_INDEX_SAMPLES );
101187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( iEst<=SQLITE_INDEX_SAMPLES );
101188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iEst<1 ){
101189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *piEst = 50/SQLITE_INDEX_SAMPLES;
101190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
101191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *piEst = (iEst*100)/SQLITE_INDEX_SAMPLES;
101192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ValueFree(pLowerVal);
101194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ValueFree(pUpperVal);
101195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
101196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- range_est_fallback:
101738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK
101739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && whereKeyStats(pParse, p, pRangeVal, 1, a)==SQLITE_OK
101740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
101741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iUpper = a[0];
101742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pUpper->eOperator==WO_LE ) iUpper += a[1];
101743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ValueFree(pRangeVal);
101745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
101747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iUpper<=iLower ){
101748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pRangeDiv = (double)p->aiRowEst[0];
101749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
101750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pRangeDiv = (double)p->aiRowEst[0]/(double)(iUpper - iLower);
101751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(("range scan regions: %u..%u div=%g\n",
101753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (u32)iLower, (u32)iUpper, *pRangeDiv));
101754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
101755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101198 101757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
101199 101758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(pParse);
101200 101759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(p);
101201 101760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(nEq);
101202 101761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
101203 101762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pLower || pUpper );
101204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *piEst = 100;
101205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pLower && (pLower->wtFlags & TERM_VNULL)==0 ) *piEst /= 4;
101206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pUpper ) *piEst /= 4;
101763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pRangeDiv = (double)1;
101764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pLower && (pLower->wtFlags & TERM_VNULL)==0 ) *pRangeDiv *= (double)4;
101765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pUpper ) *pRangeDiv *= (double)4;
101207 101766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
101208 101767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101209 101768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
101769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
101211 101770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
101212 101771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Estimate the number of rows that will be returned based on
101213 101772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an equality constraint x=VALUE and where that VALUE occurs in
101214 101773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the histogram data. This only works when x is the left-most
101215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** column of an index and sqlite_stat2 histogram data is available
101774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** column of an index and sqlite_stat3 histogram data is available
101216 101775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for that index. When pExpr==NULL that means the constraint is
101217 101776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "x IS NULL" instead of "x=VALUE".
101218 101777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
101219 101778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Write the estimated row count into *pnRow and return SQLITE_OK.
101220 101779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If unable to make an estimate, leave *pnRow unchanged and return
@@ -101230,14 +101789,13 @@
101230 101789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *p, /* The index whose left-most column is pTerm */
101231 101790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr, /* Expression for VALUE in the x=VALUE constraint */
101232 101791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double *pnRow /* Write the revised row estimate here */
101233 101792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
101234 101793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value *pRhs = 0; /* VALUE on right-hand side of pTerm */
101235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iLower, iUpper; /* Range of histogram regions containing pRhs */
101236 101794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 aff; /* Column affinity */
101237 101795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc; /* Subfunction return code */
101238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double nRowEst; /* New estimate of the number of rows */
101796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt a[2]; /* Statistics */
101239 101797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101240 101798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->aSample!=0 );
101241 101799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aff = p->pTable->aCol[p->aiColumn[0]].affinity;
101242 101800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr ){
101243 101801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = valueFromExpr(pParse, pExpr, aff, &pRhs);
@@ -101244,30 +101802,22 @@
101244 101802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) goto whereEqualScanEst_cancel;
101245 101803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
101246 101804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRhs = sqlite3ValueNew(pParse->db);
101247 101805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101248 101806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRhs==0 ) return SQLITE_NOTFOUND;
101249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = whereRangeRegion(pParse, p, pRhs, 0, &iLower);
101250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ) goto whereEqualScanEst_cancel;
101251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = whereRangeRegion(pParse, p, pRhs, 1, &iUpper);
101252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ) goto whereEqualScanEst_cancel;
101253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(("equality scan regions: %d..%d\n", iLower, iUpper));
101254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iLower>=iUpper ){
101255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nRowEst = p->aiRowEst[0]/(SQLITE_INDEX_SAMPLES*2);
101256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nRowEst<*pnRow ) *pnRow = nRowEst;
101257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
101258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nRowEst = (iUpper-iLower)*p->aiRowEst[0]/SQLITE_INDEX_SAMPLES;
101259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pnRow = nRowEst;
101260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
101807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = whereKeyStats(pParse, p, pRhs, 0, a);
101808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
101809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(("equality scan regions: %d\n", (int)a[1]));
101810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnRow = a[1];
101811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101262 101812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
whereEqualScanEst_cancel:
101263 101813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ValueFree(pRhs);
101264 101814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
101265 101815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* defined(SQLITE_ENABLE_STAT2) */
101816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* defined(SQLITE_ENABLE_STAT3) */
101267 101817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
101818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
101269 101819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
101270 101820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Estimate the number of rows that will be returned based on
101271 101821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an IN constraint where the right-hand side of the IN operator
101272 101822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is a list of values. Example:
101273 101823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -101286,64 +101836,29 @@
101286 101836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* Parsing & code generating context */
101287 101837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *p, /* The index whose left-most column is pTerm */
101288 101838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pList, /* The value list on the RHS of "x IN (v1,v2,v3,...)" */
101289 101839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double *pnRow /* Write the revised row estimate here */
101290 101840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
101291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_value *pVal = 0; /* One value from list */
101292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iLower, iUpper; /* Range of histogram regions containing pRhs */
101293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 aff; /* Column affinity */
101294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = SQLITE_OK; /* Subfunction return code */
101295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double nRowEst; /* New estimate of the number of rows */
101296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nSpan = 0; /* Number of histogram regions spanned */
101297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nSingle = 0; /* Histogram regions hit by a single value */
101298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nNotFound = 0; /* Count of values that are not constants */
101299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i; /* Loop counter */
101300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 aSpan[SQLITE_INDEX_SAMPLES+1]; /* Histogram regions that are spanned */
101301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 aSingle[SQLITE_INDEX_SAMPLES+1]; /* Histogram regions hit once */
101841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK; /* Subfunction return code */
101842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double nEst; /* Number of rows for a single term */
101843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double nRowEst = (double)0; /* New estimate of the number of rows */
101844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Loop counter */
101302 101845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101303 101846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->aSample!=0 );
101304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aff = p->pTable->aCol[p->aiColumn[0]].affinity;
101305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(aSpan, 0, sizeof(aSpan));
101306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(aSingle, 0, sizeof(aSingle));
101307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<pList->nExpr; i++){
101308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ValueFree(pVal);
101309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = valueFromExpr(pParse, pList->a[i].pExpr, aff, &pVal);
101310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ) break;
101311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pVal==0 || sqlite3_value_type(pVal)==SQLITE_NULL ){
101312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nNotFound++;
101313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- continue;
101314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = whereRangeRegion(pParse, p, pVal, 0, &iLower);
101316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ) break;
101317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = whereRangeRegion(pParse, p, pVal, 1, &iUpper);
101318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ) break;
101319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iLower>=iUpper ){
101320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aSingle[iLower] = 1;
101321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
101322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( iLower>=0 && iUpper<=SQLITE_INDEX_SAMPLES );
101323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( iLower<iUpper ) aSpan[iLower++] = 1;
101324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; rc==SQLITE_OK && i<pList->nExpr; i++){
101848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nEst = p->aiRowEst[0];
101849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = whereEqualScanEst(pParse, p, pList->a[i].pExpr, &nEst);
101850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRowEst += nEst;
101325 101851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101326 101852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
101327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=nSpan=0; i<=SQLITE_INDEX_SAMPLES; i++){
101328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( aSpan[i] ){
101329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nSpan++;
101330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( aSingle[i] ){
101331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nSingle++;
101332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
101334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nRowEst = (nSpan*2+nSingle)*p->aiRowEst[0]/(2*SQLITE_INDEX_SAMPLES)
101335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- + nNotFound*p->aiRowEst[1];
101336 101853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nRowEst > p->aiRowEst[0] ) nRowEst = p->aiRowEst[0];
101337 101854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnRow = nRowEst;
101338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(("IN row estimate: nSpan=%d, nSingle=%d, nNotFound=%d, est=%g\n",
101339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nSpan, nSingle, nNotFound, nRowEst));
101855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(("IN row estimate: est=%g\n", nRowEst));
101340 101856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ValueFree(pVal);
101342 101857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
101343 101858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* defined(SQLITE_ENABLE_STAT2) */
101859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* defined(SQLITE_ENABLE_STAT3) */
101345 101860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101346 101861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101347 101862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
101348 101863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Find the best query plan for accessing a particular table. Write the
101349 101864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** best query plan and its cost into the WhereCost object supplied as the
@@ -101386,11 +101901,11 @@
101386 101901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pProbe; /* An index we are evaluating */
101387 101902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx; /* Copy of pProbe, or zero for IPK index */
101388 101903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eqTermMask; /* Current mask of valid equality operators */
101389 101904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int idxEqTermMask; /* Index mask of valid equality operators */
101390 101905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index sPk; /* A fake index object for the primary key */
101391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned int aiRowEstPk[2]; /* The aiRowEst[] value for the sPk index */
101906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tRowcnt aiRowEstPk[2]; /* The aiRowEst[] value for the sPk index */
101392 101907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int aiColumnPk = -1; /* The aColumn[] value for the sPk index */
101393 101908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int wsFlagMask; /* Allowed flags in pCost->plan.wsFlag */
101394 101909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101395 101910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Initialize the cost to a worst-case value */
101396 101911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pCost, 0, sizeof(*pCost));
@@ -101441,11 +101956,11 @@
101441 101956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101442 101957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101443 101958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Loop over all indices looking for the best one to use
101444 101959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
101445 101960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(; pProbe; pIdx=pProbe=pProbe->pNext){
101446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const unsigned int * const aiRowEst = pProbe->aiRowEst;
101961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const tRowcnt * const aiRowEst = pProbe->aiRowEst;
101447 101962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double cost; /* Cost of using pProbe */
101448 101963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double nRow; /* Estimated number of rows in result set */
101449 101964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double log10N; /* base-10 logarithm of nRow (inexact) */
101450 101965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rev; /* True to scan in reverse order */
101451 101966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int wsFlags = 0;
@@ -101484,18 +101999,16 @@
101484 101999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Set to true if there was at least one "x IN (SELECT ...)" term used
101485 102000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in determining the value of nInMul. Note that the RHS of the
101486 102001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** IN operator must be a SELECT, not a value list, for this variable
101487 102002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to be true.
101488 102003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
101489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** estBound:
101490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** An estimate on the amount of the table that must be searched. A
101491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** value of 100 means the entire table is searched. Range constraints
101492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** might reduce this to a value less than 100 to indicate that only
101493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a fraction of the table needs searching. In the absence of
101494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite_stat2 ANALYZE data, a single inequality reduces the search
101495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** space to 1/4rd its original size. So an x>? constraint reduces
101496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** estBound to 25. Two constraints (x>? AND x<?) reduce estBound to 6.
102004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** rangeDiv:
102005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** An estimate of a divisor by which to reduce the search space due
102006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to inequality constraints. In the absence of sqlite_stat3 ANALYZE
102007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** data, a single inequality reduces the search space to 1/4rd its
102008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** original size (rangeDiv==4). Two inequalities reduce the search
102009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** space to 1/16th of its original size (rangeDiv==16).
101497 102010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
101498 102011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** bSort:
101499 102012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Boolean. True if there is an ORDER BY clause that will require an
101500 102013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** external sort (i.e. scanning the index being evaluated will not
101501 102014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** correctly order records).
@@ -101516,17 +102029,17 @@
101516 102029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SELECT a, b, c FROM tbl WHERE a = 1;
101517 102030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
101518 102031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nEq; /* Number of == or IN terms matching index */
101519 102032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bInEst = 0; /* True if "x IN (SELECT...)" seen */
101520 102033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nInMul = 1; /* Number of distinct equalities to lookup */
101521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int estBound = 100; /* Estimated reduction in search space */
102034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double rangeDiv = (double)1; /* Estimated reduction in search space */
101522 102035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nBound = 0; /* Number of range constraints seen */
101523 102036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bSort = !!pOrderBy; /* True if external sort required */
101524 102037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bDist = !!pDistinct; /* True if index cannot help with DISTINCT */
101525 102038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bLookup = 0; /* True if not a covering index */
101526 102039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pTerm; /* A single term of the WHERE clause */
101527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
102040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
101528 102041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pFirstTerm = 0; /* First term matching the index */
101529 102042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
101530 102043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101531 102044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Determine the values of nEq and nInMul */
101532 102045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(nEq=0; nEq<pProbe->nColumn; nEq++){
@@ -101546,23 +102059,23 @@
101546 102059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nInMul *= pExpr->x.pList->nExpr;
101547 102060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101548 102061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pTerm->eOperator & WO_ISNULL ){
101549 102062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsFlags |= WHERE_COLUMN_NULL;
101550 102063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
102064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
101552 102065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nEq==0 && pProbe->aSample ) pFirstTerm = pTerm;
101553 102066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
101554 102067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
used |= pTerm->prereqRight;
101555 102068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101556 102069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Determine the value of estBound. */
102070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Determine the value of rangeDiv */
101558 102071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nEq<pProbe->nColumn && pProbe->bUnordered==0 ){
101559 102072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int j = pProbe->aiColumn[nEq];
101560 102073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE|WO_GT|WO_GE, pIdx) ){
101561 102074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pTop = findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE, pIdx);
101562 102075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pBtm = findTerm(pWC, iCur, j, notReady, WO_GT|WO_GE, pIdx);
101563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- whereRangeScanEst(pParse, pProbe, nEq, pBtm, pTop, &estBound);
102076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ whereRangeScanEst(pParse, pProbe, nEq, pBtm, pTop, &rangeDiv);
101564 102077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTop ){
101565 102078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nBound = 1;
101566 102079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsFlags |= WHERE_TOP_LIMIT;
101567 102080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
used |= pTop->prereqRight;
101568 102081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -101630,11 +102143,11 @@
101630 102143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bInEst && nRow*2>aiRowEst[0] ){
101631 102144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nRow = aiRowEst[0]/2;
101632 102145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nInMul = (int)(nRow / aiRowEst[nEq]);
101633 102146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101634 102147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STAT2
102148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STAT3
101636 102149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the constraint is of the form x=VALUE or x IN (E1,E2,...)
101637 102150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and we do not think that values of x are unique and if histogram
101638 102151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** data is available for column x, then it might be possible
101639 102152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to get a better estimate on the number of rows based on
101640 102153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** VALUE and how common that value is according to the histogram.
@@ -101646,16 +102159,16 @@
101646 102159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
whereEqualScanEst(pParse, pProbe, pFirstTerm->pExpr->pRight, &nRow);
101647 102160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pFirstTerm->eOperator==WO_IN && bInEst==0 ){
101648 102161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
whereInScanEst(pParse, pProbe, pFirstTerm->pExpr->x.pList, &nRow);
101649 102162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101650 102163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* SQLITE_ENABLE_STAT2 */
102164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_ENABLE_STAT3 */
101652 102165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101653 102166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Adjust the number of output rows and downward to reflect rows
101654 102167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that are excluded by range constraints.
101655 102168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
101656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nRow = (nRow * (double)estBound) / (double)100;
102169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRow = nRow/rangeDiv;
101657 102170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nRow<1 ) nRow = 1;
101658 102171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101659 102172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Experiments run on real SQLite databases show that the time needed
101660 102173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to do a binary search to locate a row in a table or index is roughly
101661 102174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** log10(N) times the time to move from one row to the next row within
@@ -101780,14 +102293,14 @@
101780 102293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nRow<2 ) nRow = 2;
101781 102294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101782 102295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101783 102296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101784 102297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERETRACE((
101785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "%s(%s): nEq=%d nInMul=%d estBound=%d bSort=%d bLookup=%d wsFlags=0x%x\n"
102298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "%s(%s): nEq=%d nInMul=%d rangeDiv=%d bSort=%d bLookup=%d wsFlags=0x%x\n"
101786 102299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" notReady=0x%llx log10N=%.1f nRow=%.1f cost=%.1f used=0x%llx\n",
101787 102300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrc->pTab->zName, (pIdx ? pIdx->zName : "ipk"),
101788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nEq, nInMul, estBound, bSort, bLookup, wsFlags,
102301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nEq, nInMul, (int)rangeDiv, bSort, bLookup, wsFlags,
101789 102302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
notReady, log10N, nRow, cost, used
101790 102303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
));
101791 102304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101792 102305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If this index is the best we have seen so far, then record this
101793 102306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** index and its cost in the pCost structure.
101794 102307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!