mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-11 01:42:22 +03:00
Clarification on the meaning of SrcList and SrcItem and especially the
SrcItem.colUsed and Index.colNotIdxed fields. Comment changes only - no changes to code. FossilOrigin-Name: d96f6cc8475ae5509b8bff2db75e3c6f69a214d58d8979fbc0162ae488a040dc
This commit is contained in:
@@ -2579,10 +2579,22 @@ struct UnpackedRecord {
|
||||
** The Index.onError field determines whether or not the indexed columns
|
||||
** must be unique and what to do if they are not. When Index.onError=OE_None,
|
||||
** it means this is not a unique index. Otherwise it is a unique index
|
||||
** and the value of Index.onError indicate the which conflict resolution
|
||||
** algorithm to employ whenever an attempt is made to insert a non-unique
|
||||
** and the value of Index.onError indicates which conflict resolution
|
||||
** algorithm to employ when an attempt is made to insert a non-unique
|
||||
** element.
|
||||
**
|
||||
** The colNotIdxed bitmask is used in combination with SrcItem.colUsed
|
||||
** for a fast test to see if an index can serve as a covering index.
|
||||
** colNotIdxed has a 1 bit for every column of the original table that
|
||||
** is *not* available in the index. Thus the expression
|
||||
** "colUsed & colNotIdxed" will be non-zero if the index is not a
|
||||
** covering index. The most significant bit of of colNotIdxed will always
|
||||
** be true (note-20221022-a). If a column beyond the 63rd column of the
|
||||
** table is used, the "colUsed & colNotIdxed" test will always be non-zero
|
||||
** and we have to assume either that the index is not covering, or use
|
||||
** an alternative (slower) algorithm to determine whether or not
|
||||
** the index is covering.
|
||||
**
|
||||
** While parsing a CREATE TABLE or CREATE INDEX statement in order to
|
||||
** generate VDBE code (as opposed to parsing one read from an sqlite_schema
|
||||
** table as part of parsing an existing database schema), transient instances
|
||||
@@ -2628,7 +2640,7 @@ struct Index {
|
||||
tRowcnt *aiRowEst; /* Non-logarithmic stat1 data for this index */
|
||||
tRowcnt nRowEst0; /* Non-logarithmic number of rows in the index */
|
||||
#endif
|
||||
Bitmask colNotIdxed; /* 0 for unindexed columns in pTab */
|
||||
Bitmask colNotIdxed; /* Unindexed columns in pTab */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -3081,6 +3093,14 @@ struct IdList {
|
||||
** The SrcItem object represents a single term in the FROM clause of a query.
|
||||
** The SrcList object is mostly an array of SrcItems.
|
||||
**
|
||||
** The jointype starts out showing the join type between the current table
|
||||
** and the next table on the list. The parser builds the list this way.
|
||||
** But sqlite3SrcListShiftJoinType() later shifts the jointypes so that each
|
||||
** jointype expresses the join between the table and the previous table.
|
||||
**
|
||||
** In the colUsed field, the high-order bit (bit 63) is set if the table
|
||||
** contains more than 63 columns and the 64-th or later column is used.
|
||||
**
|
||||
** Union member validity:
|
||||
**
|
||||
** u1.zIndexedBy fg.isIndexedBy && !fg.isTabFunc
|
||||
@@ -3120,7 +3140,7 @@ struct SrcItem {
|
||||
Expr *pOn; /* fg.isUsing==0 => The ON clause of a join */
|
||||
IdList *pUsing; /* fg.isUsing==1 => The USING clause of a join */
|
||||
} u3;
|
||||
Bitmask colUsed; /* Bit N (1<<N) set if column N of pTab is used */
|
||||
Bitmask colUsed; /* Bit N set if column N used. Details above for N>62 */
|
||||
union {
|
||||
char *zIndexedBy; /* Identifier from "INDEXED BY <zIndex>" clause */
|
||||
ExprList *pFuncArg; /* Arguments to table-valued-function */
|
||||
@@ -3141,23 +3161,11 @@ struct OnOrUsing {
|
||||
};
|
||||
|
||||
/*
|
||||
** The following structure describes the FROM clause of a SELECT statement.
|
||||
** Each table or subquery in the FROM clause is a separate element of
|
||||
** the SrcList.a[] array.
|
||||
** This object represents one or more tables that are the source of
|
||||
** content for an SQL statement. For example, a single SrcList object
|
||||
** is used to hold the FROM clause of a SELECT statement. SrcList also
|
||||
** represents the target tables for DELETE, INSERT, and UPDATE statements.
|
||||
**
|
||||
** With the addition of multiple database support, the following structure
|
||||
** can also be used to describe a particular table such as the table that
|
||||
** is modified by an INSERT, DELETE, or UPDATE statement. In standard SQL,
|
||||
** such a table must be a simple name: ID. But in SQLite, the table can
|
||||
** now be identified by a database name, a dot, then the table name: ID.ID.
|
||||
**
|
||||
** The jointype starts out showing the join type between the current table
|
||||
** and the next table on the list. The parser builds the list this way.
|
||||
** But sqlite3SrcListShiftJoinType() later shifts the jointypes so that each
|
||||
** jointype expresses the join between the table and the previous table.
|
||||
**
|
||||
** In the colUsed field, the high-order bit (bit 63) is set if the table
|
||||
** contains more than 63 columns and the 64-th or later column is used.
|
||||
*/
|
||||
struct SrcList {
|
||||
int nSrc; /* Number of tables or subqueries in the FROM clause */
|
||||
|
||||
Reference in New Issue
Block a user