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:
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Add\sSQLITE_DQS\sto\sthe\scompileoptions_used\slist,\sper\srequest\sin\s[forum\spost\s8b1060122b|forum:8b1060122b].\sForce\sDQS=0\sin\ssqlite3-wasm.c.
|
C Clarification\son\sthe\smeaning\sof\sSrcList\sand\sSrcItem\sand\sespecially\sthe\nSrcItem.colUsed\sand\sIndex.colNotIdxed\sfields.\s\sComment\schanges\sonly\s-\sno\nchanges\sto\scode.
|
||||||
D 2022-10-21T17:48:49.786
|
D 2022-10-22T13:49:35.916
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@@ -562,7 +562,7 @@ F src/btmutex.c 6ffb0a22c19e2f9110be0964d0731d2ef1c67b5f7fabfbaeb7b9dabc4b7740ca
|
|||||||
F src/btree.c 74fc5f6a0577df703d6f98d0c51ee0d8d91d22dbc0ba86e42e056517e2b45576
|
F src/btree.c 74fc5f6a0577df703d6f98d0c51ee0d8d91d22dbc0ba86e42e056517e2b45576
|
||||||
F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22
|
F src/btree.h 74d64b8f28cfa4a894d14d4ed64fa432cd697b98b61708d4351482ae15913e22
|
||||||
F src/btreeInt.h 8ce1332edd89dfd2461d561ac10a0ab5601c8e06200cb5230596c3caaf54482e
|
F src/btreeInt.h 8ce1332edd89dfd2461d561ac10a0ab5601c8e06200cb5230596c3caaf54482e
|
||||||
F src/build.c 13bcc04821ad260ef00d87e0704424e0ae4e6cd66c7e384b4cedb379a6cb738b
|
F src/build.c d3e43e950e4e377c1d451a4862556792acdef1faba14a03f899d30d09731c48b
|
||||||
F src/callback.c 4cd7225b26a97f7de5fee5ae10464bed5a78f2adefe19534cc2095b3a8ca484a
|
F src/callback.c 4cd7225b26a97f7de5fee5ae10464bed5a78f2adefe19534cc2095b3a8ca484a
|
||||||
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
|
F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
|
||||||
F src/ctime.c 20507cc0b0a6c19cd882fcd0eaeda32ae6a4229fb4b024cfdf3183043d9b703d
|
F src/ctime.c 20507cc0b0a6c19cd882fcd0eaeda32ae6a4229fb4b024cfdf3183043d9b703d
|
||||||
@@ -625,7 +625,7 @@ F src/shell.c.in 6a9e15cb9fc3cd13d3647d4d9714c0d4d4a65e7f49228c2aafca910ed08d577
|
|||||||
F src/sqlite.h.in d9c8a6243fc0a1c270d69db33758e34b810af3462f9bc5b4af113b347e07c69d
|
F src/sqlite.h.in d9c8a6243fc0a1c270d69db33758e34b810af3462f9bc5b4af113b347e07c69d
|
||||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||||
F src/sqlite3ext.h 5336beea1868d99d2f62e628dbea55e97267dbff8193291ab175e960c5df9141
|
F src/sqlite3ext.h 5336beea1868d99d2f62e628dbea55e97267dbff8193291ab175e960c5df9141
|
||||||
F src/sqliteInt.h ce8bf543210ab4a8a797e6abaf45e15f4cff24570b1043560aa747b3dc1a7935
|
F src/sqliteInt.h 36f456f599a1bda4287ece61f3a9305b0b8d90ff49017a47a981cda5721a7ce0
|
||||||
F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
|
F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
|
||||||
F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749
|
F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749
|
||||||
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
|
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
|
||||||
@@ -2036,8 +2036,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 9cf1142b0cdb13347e3f551c862cb4714cadfe5ad637f049cf0a4b8bb6125b32
|
P fcd9e0dbe3226f3f7ccc15b11fc3aa3b8058571bef274c25a33e9753e22f7551
|
||||||
R f0d8c3eadf9b3a16756631ad00044092
|
R 3bee91f5b3c5cc3b42735acd38a39745
|
||||||
U stephan
|
U drh
|
||||||
Z 4b9ac72991a7e1ed1b8b1873a504bb5c
|
Z 7715147e0f497c16dde985e20f495b12
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
fcd9e0dbe3226f3f7ccc15b11fc3aa3b8058571bef274c25a33e9753e22f7551
|
d96f6cc8475ae5509b8bff2db75e3c6f69a214d58d8979fbc0162ae488a040dc
|
||||||
@@ -2276,7 +2276,8 @@ static int isDupColumn(Index *pIdx, int nKey, Index *pPk, int iCol){
|
|||||||
/* Recompute the colNotIdxed field of the Index.
|
/* Recompute the colNotIdxed field of the Index.
|
||||||
**
|
**
|
||||||
** colNotIdxed is a bitmask that has a 0 bit representing each indexed
|
** colNotIdxed is a bitmask that has a 0 bit representing each indexed
|
||||||
** columns that are within the first 63 columns of the table. The
|
** columns that are within the first 63 columns of the table and a 1 for
|
||||||
|
** all other bits (all columns that are not in the index). The
|
||||||
** high-order bit of colNotIdxed is always 1. All unindexed columns
|
** high-order bit of colNotIdxed is always 1. All unindexed columns
|
||||||
** of the table have a 1.
|
** of the table have a 1.
|
||||||
**
|
**
|
||||||
@@ -2304,7 +2305,7 @@ static void recomputeColumnsNotIndexed(Index *pIdx){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
pIdx->colNotIdxed = ~m;
|
pIdx->colNotIdxed = ~m;
|
||||||
assert( (pIdx->colNotIdxed>>63)==1 );
|
assert( (pIdx->colNotIdxed>>63)==1 ); /* See note-20221022-a */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -2579,10 +2579,22 @@ struct UnpackedRecord {
|
|||||||
** The Index.onError field determines whether or not the indexed columns
|
** 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,
|
** 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
|
** 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
|
** and the value of Index.onError indicates which conflict resolution
|
||||||
** algorithm to employ whenever an attempt is made to insert a non-unique
|
** algorithm to employ when an attempt is made to insert a non-unique
|
||||||
** element.
|
** 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
|
** 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
|
** generate VDBE code (as opposed to parsing one read from an sqlite_schema
|
||||||
** table as part of parsing an existing database schema), transient instances
|
** 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 *aiRowEst; /* Non-logarithmic stat1 data for this index */
|
||||||
tRowcnt nRowEst0; /* Non-logarithmic number of rows in the index */
|
tRowcnt nRowEst0; /* Non-logarithmic number of rows in the index */
|
||||||
#endif
|
#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 SrcItem object represents a single term in the FROM clause of a query.
|
||||||
** The SrcList object is mostly an array of SrcItems.
|
** 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:
|
** Union member validity:
|
||||||
**
|
**
|
||||||
** u1.zIndexedBy fg.isIndexedBy && !fg.isTabFunc
|
** u1.zIndexedBy fg.isIndexedBy && !fg.isTabFunc
|
||||||
@@ -3120,7 +3140,7 @@ struct SrcItem {
|
|||||||
Expr *pOn; /* fg.isUsing==0 => The ON clause of a join */
|
Expr *pOn; /* fg.isUsing==0 => The ON clause of a join */
|
||||||
IdList *pUsing; /* fg.isUsing==1 => The USING clause of a join */
|
IdList *pUsing; /* fg.isUsing==1 => The USING clause of a join */
|
||||||
} u3;
|
} 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 {
|
union {
|
||||||
char *zIndexedBy; /* Identifier from "INDEXED BY <zIndex>" clause */
|
char *zIndexedBy; /* Identifier from "INDEXED BY <zIndex>" clause */
|
||||||
ExprList *pFuncArg; /* Arguments to table-valued-function */
|
ExprList *pFuncArg; /* Arguments to table-valued-function */
|
||||||
@@ -3141,23 +3161,11 @@ struct OnOrUsing {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** The following structure describes the FROM clause of a SELECT statement.
|
** This object represents one or more tables that are the source of
|
||||||
** Each table or subquery in the FROM clause is a separate element of
|
** content for an SQL statement. For example, a single SrcList object
|
||||||
** the SrcList.a[] array.
|
** 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 {
|
struct SrcList {
|
||||||
int nSrc; /* Number of tables or subqueries in the FROM clause */
|
int nSrc; /* Number of tables or subqueries in the FROM clause */
|
||||||
|
|||||||
Reference in New Issue
Block a user