mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Data structure cleanup. Remove unused fields. Rearrange other files for
tighter packing and reduced memory usage. FossilOrigin-Name: 0bc594e861ae1142e8c6c83f39b095e1432856bf
This commit is contained in:
18
manifest
18
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Simplified\sarray\sallocation\sin\sthe\sIdList\sand\sAggInfo\sobjects.
|
C Data\sstructure\scleanup.\s\sRemove\sunused\sfields.\s\sRearrange\sother\sfiles\sfor\ntighter\spacking\sand\sreduced\smemory\susage.
|
||||||
D 2012-02-02T03:38:30.479
|
D 2012-02-02T15:50:17.008
|
||||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||||
F Makefile.in 3f79a373e57c3b92dabf76f40b065e719d31ac34
|
F Makefile.in 3f79a373e57c3b92dabf76f40b065e719d31ac34
|
||||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||||
@@ -128,7 +128,7 @@ F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
|
|||||||
F src/btree.c 24bde768288b3365bc6acfbb24030f76fefe7e1f
|
F src/btree.c 24bde768288b3365bc6acfbb24030f76fefe7e1f
|
||||||
F src/btree.h 46e9f04672f1390255bc56865a3238b384d0f2d5
|
F src/btree.h 46e9f04672f1390255bc56865a3238b384d0f2d5
|
||||||
F src/btreeInt.h 6c9960645c431c9456ca56498f43a2b3bf1fa8c2
|
F src/btreeInt.h 6c9960645c431c9456ca56498f43a2b3bf1fa8c2
|
||||||
F src/build.c 7a03d1772f906ca1ba905858b4f19d4d8b34e59d
|
F src/build.c c4d36e527f457f9992a6663365871dfa7c5094b8
|
||||||
F src/callback.c 0425c6320730e6d3981acfb9202c1bed9016ad1a
|
F src/callback.c 0425c6320730e6d3981acfb9202c1bed9016ad1a
|
||||||
F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
|
F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
|
||||||
F src/ctime.c a9c26822515f81ec21588cbb482ca6724be02e33
|
F src/ctime.c a9c26822515f81ec21588cbb482ca6724be02e33
|
||||||
@@ -172,7 +172,7 @@ F src/pager.c 2d892f7b901a8867a33bc21742086165a3a99af8
|
|||||||
F src/pager.h a435da8421dc7844b7f9c7f37b636c160c50208a
|
F src/pager.h a435da8421dc7844b7f9c7f37b636c160c50208a
|
||||||
F src/parse.y f36fb379d4f82be77fab088ae280b86ed524016c
|
F src/parse.y f36fb379d4f82be77fab088ae280b86ed524016c
|
||||||
F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
|
F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
|
||||||
F src/pcache.h b1d8775a9bddf44e65edb0d20bfc57a4982f840f
|
F src/pcache.h 1b5dcc3dc8103d03e625b177023ee67764fa6b7c
|
||||||
F src/pcache1.c 281822d22265245b19f908cb3f5df725f7e11b06
|
F src/pcache1.c 281822d22265245b19f908cb3f5df725f7e11b06
|
||||||
F src/pragma.c 350f59843f4ec4fca5dc63d497caf6433096bbdd
|
F src/pragma.c 350f59843f4ec4fca5dc63d497caf6433096bbdd
|
||||||
F src/prepare.c ec4989f7f480544bdc4192fe663470d2a2d7d61e
|
F src/prepare.c ec4989f7f480544bdc4192fe663470d2a2d7d61e
|
||||||
@@ -184,7 +184,7 @@ F src/select.c b6eec9d11ec5df0d1fd11e8a0eed0fc2d2d96b25
|
|||||||
F src/shell.c 60d147c2411dd2d79a5151cfb9a068de87c7babe
|
F src/shell.c 60d147c2411dd2d79a5151cfb9a068de87c7babe
|
||||||
F src/sqlite.h.in 371c30e4be94b9b0ea6400ed66663fcf8e891eb4
|
F src/sqlite.h.in 371c30e4be94b9b0ea6400ed66663fcf8e891eb4
|
||||||
F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477
|
F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477
|
||||||
F src/sqliteInt.h e4275be35f82b3da4734d0d8eb97c618a91bb1a1
|
F src/sqliteInt.h 736f3a7748434200db7a9e0a352b67d1b8759e0a
|
||||||
F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
|
F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
|
||||||
F src/status.c 4568e72dfd36b6a5911f93457364deb072e0b03a
|
F src/status.c 4568e72dfd36b6a5911f93457364deb072e0b03a
|
||||||
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
|
||||||
@@ -240,7 +240,7 @@ F src/update.c d3076782c887c10e882996550345da9c4c9f9dea
|
|||||||
F src/utf.c 890c67dcfcc7a74623c95baac7535aadfe265e84
|
F src/utf.c 890c67dcfcc7a74623c95baac7535aadfe265e84
|
||||||
F src/util.c 9e07bd67dfafe9c75b1da78c87ba030cebbb5388
|
F src/util.c 9e07bd67dfafe9c75b1da78c87ba030cebbb5388
|
||||||
F src/vacuum.c 0c0ba2242355c6048d65e2b333abe0f7c06348fa
|
F src/vacuum.c 0c0ba2242355c6048d65e2b333abe0f7c06348fa
|
||||||
F src/vdbe.c 595a240233b88960dd99380edf2fb7ec4317ee24
|
F src/vdbe.c 43ea77c83e7f35169328f13b20cc8140bd2cf473
|
||||||
F src/vdbe.h 18f581cac1f4339ec3299f3e0cc6e11aec654cdb
|
F src/vdbe.h 18f581cac1f4339ec3299f3e0cc6e11aec654cdb
|
||||||
F src/vdbeInt.h 2e79ce66ff45a01411151957bb2899af680f1560
|
F src/vdbeInt.h 2e79ce66ff45a01411151957bb2899af680f1560
|
||||||
F src/vdbeapi.c 3662b6a468a2a4605a15dfab313baa6dff81ad91
|
F src/vdbeapi.c 3662b6a468a2a4605a15dfab313baa6dff81ad91
|
||||||
@@ -988,7 +988,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
|
|||||||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||||
F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a
|
F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a
|
||||||
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
||||||
P a3553b8a035b70e76a5a325b9e9f379f84de3955
|
P 25df2a7458d025bc00380b4a0893637639f9f0d4
|
||||||
R 0dee572dcbe8f4a7b8dff88e26875d80
|
R d2ba4c243c1dae496337618e0657e24d
|
||||||
U drh
|
U drh
|
||||||
Z 566ebf07e0f933f12b6e71767840fbdb
|
Z ada6e2e4fcf7ab0bc8362d130037dce6
|
||||||
|
@@ -1 +1 @@
|
|||||||
25df2a7458d025bc00380b4a0893637639f9f0d4
|
0bc594e861ae1142e8c6c83f39b095e1432856bf
|
@@ -1638,7 +1638,6 @@ void sqlite3EndTable(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pParse->pNewTable = 0;
|
pParse->pNewTable = 0;
|
||||||
db->nTable++;
|
|
||||||
db->flags |= SQLITE_InternChanges;
|
db->flags |= SQLITE_InternChanges;
|
||||||
|
|
||||||
#ifndef SQLITE_OMIT_ALTERTABLE
|
#ifndef SQLITE_OMIT_ALTERTABLE
|
||||||
|
@@ -27,8 +27,8 @@ struct PgHdr {
|
|||||||
void *pData; /* Page data */
|
void *pData; /* Page data */
|
||||||
void *pExtra; /* Extra content */
|
void *pExtra; /* Extra content */
|
||||||
PgHdr *pDirty; /* Transient list of dirty pages */
|
PgHdr *pDirty; /* Transient list of dirty pages */
|
||||||
Pgno pgno; /* Page number for this page */
|
|
||||||
Pager *pPager; /* The pager this page is part of */
|
Pager *pPager; /* The pager this page is part of */
|
||||||
|
Pgno pgno; /* Page number for this page */
|
||||||
#ifdef SQLITE_CHECK_PAGES
|
#ifdef SQLITE_CHECK_PAGES
|
||||||
u32 pageHash; /* Hash of page content */
|
u32 pageHash; /* Hash of page content */
|
||||||
#endif
|
#endif
|
||||||
|
143
src/sqliteInt.h
143
src/sqliteInt.h
@@ -797,35 +797,16 @@ struct FuncDefHash {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
** Each database connection is an instance of the following structure.
|
** Each database connection is an instance of the following structure.
|
||||||
**
|
|
||||||
** The sqlite.lastRowid records the last insert rowid generated by an
|
|
||||||
** insert statement. Inserts on views do not affect its value. Each
|
|
||||||
** trigger has its own context, so that lastRowid can be updated inside
|
|
||||||
** triggers as usual. The previous value will be restored once the trigger
|
|
||||||
** exits. Upon entering a before or instead of trigger, lastRowid is no
|
|
||||||
** longer (since after version 2.8.12) reset to -1.
|
|
||||||
**
|
|
||||||
** The sqlite.nChange does not count changes within triggers and keeps no
|
|
||||||
** context. It is reset at start of sqlite3_exec.
|
|
||||||
** The sqlite.lsChange represents the number of changes made by the last
|
|
||||||
** insert, update, or delete statement. It remains constant throughout the
|
|
||||||
** length of a statement and is then updated by OP_SetCounts. It keeps a
|
|
||||||
** context stack just like lastRowid so that the count of changes
|
|
||||||
** within a trigger is not seen outside the trigger. Changes to views do not
|
|
||||||
** affect the value of lsChange.
|
|
||||||
** The sqlite.csChange keeps track of the number of current changes (since
|
|
||||||
** the last statement) and is used to update sqlite_lsChange.
|
|
||||||
**
|
|
||||||
** The member variables sqlite.errCode, sqlite.zErrMsg and sqlite.zErrMsg16
|
|
||||||
** store the most recent error code and, if applicable, string. The
|
|
||||||
** internal function sqlite3Error() is used to set these variables
|
|
||||||
** consistently.
|
|
||||||
*/
|
*/
|
||||||
struct sqlite3 {
|
struct sqlite3 {
|
||||||
sqlite3_vfs *pVfs; /* OS Interface */
|
sqlite3_vfs *pVfs; /* OS Interface */
|
||||||
int nDb; /* Number of backends currently in use */
|
struct Vdbe *pVdbe; /* List of active virtual machines */
|
||||||
|
CollSeq *pDfltColl; /* The default collating sequence (BINARY) */
|
||||||
|
sqlite3_mutex *mutex; /* Connection mutex */
|
||||||
Db *aDb; /* All backends */
|
Db *aDb; /* All backends */
|
||||||
|
int nDb; /* Number of backends currently in use */
|
||||||
int flags; /* Miscellaneous flags. See below */
|
int flags; /* Miscellaneous flags. See below */
|
||||||
|
i64 lastRowid; /* ROWID of most recent insert (see above) */
|
||||||
unsigned int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */
|
unsigned int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */
|
||||||
int errCode; /* Most recent error code (SQLITE_*) */
|
int errCode; /* Most recent error code (SQLITE_*) */
|
||||||
int errMask; /* & result codes with this before returning */
|
int errMask; /* & result codes with this before returning */
|
||||||
@@ -836,27 +817,23 @@ struct sqlite3 {
|
|||||||
signed char nextAutovac; /* Autovac setting after VACUUM if >=0 */
|
signed char nextAutovac; /* Autovac setting after VACUUM if >=0 */
|
||||||
u8 suppressErr; /* Do not issue error messages if true */
|
u8 suppressErr; /* Do not issue error messages if true */
|
||||||
u8 vtabOnConflict; /* Value to return for s3_vtab_on_conflict() */
|
u8 vtabOnConflict; /* Value to return for s3_vtab_on_conflict() */
|
||||||
|
u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */
|
||||||
int nextPagesize; /* Pagesize after VACUUM if >0 */
|
int nextPagesize; /* Pagesize after VACUUM if >0 */
|
||||||
int nTable; /* Number of tables in the database */
|
|
||||||
CollSeq *pDfltColl; /* The default collating sequence (BINARY) */
|
|
||||||
i64 lastRowid; /* ROWID of most recent insert (see above) */
|
|
||||||
u32 magic; /* Magic number for detect library misuse */
|
u32 magic; /* Magic number for detect library misuse */
|
||||||
int nChange; /* Value returned by sqlite3_changes() */
|
int nChange; /* Value returned by sqlite3_changes() */
|
||||||
int nTotalChange; /* Value returned by sqlite3_total_changes() */
|
int nTotalChange; /* Value returned by sqlite3_total_changes() */
|
||||||
sqlite3_mutex *mutex; /* Connection mutex */
|
|
||||||
int aLimit[SQLITE_N_LIMIT]; /* Limits */
|
int aLimit[SQLITE_N_LIMIT]; /* Limits */
|
||||||
struct sqlite3InitInfo { /* Information used during initialization */
|
struct sqlite3InitInfo { /* Information used during initialization */
|
||||||
int iDb; /* When back is being initialized */
|
|
||||||
int newTnum; /* Rootpage of table being initialized */
|
int newTnum; /* Rootpage of table being initialized */
|
||||||
|
u8 iDb; /* Which db file is being initialized */
|
||||||
u8 busy; /* TRUE if currently initializing */
|
u8 busy; /* TRUE if currently initializing */
|
||||||
u8 orphanTrigger; /* Last statement is orphaned TEMP trigger */
|
u8 orphanTrigger; /* Last statement is orphaned TEMP trigger */
|
||||||
} init;
|
} init;
|
||||||
int nExtension; /* Number of loaded extensions */
|
|
||||||
void **aExtension; /* Array of shared library handles */
|
|
||||||
struct Vdbe *pVdbe; /* List of active virtual machines */
|
|
||||||
int activeVdbeCnt; /* Number of VDBEs currently executing */
|
int activeVdbeCnt; /* Number of VDBEs currently executing */
|
||||||
int writeVdbeCnt; /* Number of active VDBEs that are writing */
|
int writeVdbeCnt; /* Number of active VDBEs that are writing */
|
||||||
int vdbeExecCnt; /* Number of nested calls to VdbeExec() */
|
int vdbeExecCnt; /* Number of nested calls to VdbeExec() */
|
||||||
|
int nExtension; /* Number of loaded extensions */
|
||||||
|
void **aExtension; /* Array of shared library handles */
|
||||||
void (*xTrace)(void*,const char*); /* Trace function */
|
void (*xTrace)(void*,const char*); /* Trace function */
|
||||||
void *pTraceArg; /* Argument to the trace function */
|
void *pTraceArg; /* Argument to the trace function */
|
||||||
void (*xProfile)(void*,const char*,u64); /* Profiling function */
|
void (*xProfile)(void*,const char*,u64); /* Profiling function */
|
||||||
@@ -893,21 +870,20 @@ struct sqlite3 {
|
|||||||
int nProgressOps; /* Number of opcodes for progress callback */
|
int nProgressOps; /* Number of opcodes for progress callback */
|
||||||
#endif
|
#endif
|
||||||
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
||||||
|
int nVTrans; /* Allocated size of aVTrans */
|
||||||
Hash aModule; /* populated by sqlite3_create_module() */
|
Hash aModule; /* populated by sqlite3_create_module() */
|
||||||
VtabCtx *pVtabCtx; /* Context for active vtab connect/create */
|
VtabCtx *pVtabCtx; /* Context for active vtab connect/create */
|
||||||
VTable **aVTrans; /* Virtual tables with open transactions */
|
VTable **aVTrans; /* Virtual tables with open transactions */
|
||||||
int nVTrans; /* Allocated size of aVTrans */
|
|
||||||
VTable *pDisconnect; /* Disconnect these in next sqlite3_prepare() */
|
VTable *pDisconnect; /* Disconnect these in next sqlite3_prepare() */
|
||||||
#endif
|
#endif
|
||||||
FuncDefHash aFunc; /* Hash table of connection functions */
|
FuncDefHash aFunc; /* Hash table of connection functions */
|
||||||
Hash aCollSeq; /* All collating sequences */
|
Hash aCollSeq; /* All collating sequences */
|
||||||
BusyHandler busyHandler; /* Busy callback */
|
BusyHandler busyHandler; /* Busy callback */
|
||||||
int busyTimeout; /* Busy handler timeout, in msec */
|
|
||||||
Db aDbStatic[2]; /* Static space for the 2 default backends */
|
Db aDbStatic[2]; /* Static space for the 2 default backends */
|
||||||
Savepoint *pSavepoint; /* List of active savepoints */
|
Savepoint *pSavepoint; /* List of active savepoints */
|
||||||
|
int busyTimeout; /* Busy handler timeout, in msec */
|
||||||
int nSavepoint; /* Number of non-transaction savepoints */
|
int nSavepoint; /* Number of non-transaction savepoints */
|
||||||
int nStatement; /* Number of nested statement-transactions */
|
int nStatement; /* Number of nested statement-transactions */
|
||||||
u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */
|
|
||||||
i64 nDeferredCons; /* Net deferred constraints this transaction. */
|
i64 nDeferredCons; /* Net deferred constraints this transaction. */
|
||||||
int *pnBytesFreed; /* If not NULL, increment this in DbFree() */
|
int *pnBytesFreed; /* If not NULL, increment this in DbFree() */
|
||||||
|
|
||||||
@@ -1039,7 +1015,6 @@ struct FuncDestructor {
|
|||||||
#define SQLITE_FUNC_CASE 0x02 /* Case-sensitive LIKE-type function */
|
#define SQLITE_FUNC_CASE 0x02 /* Case-sensitive LIKE-type function */
|
||||||
#define SQLITE_FUNC_EPHEM 0x04 /* Ephemeral. Delete with VDBE */
|
#define SQLITE_FUNC_EPHEM 0x04 /* Ephemeral. Delete with VDBE */
|
||||||
#define SQLITE_FUNC_NEEDCOLL 0x08 /* sqlite3GetFuncCollSeq() might be called */
|
#define SQLITE_FUNC_NEEDCOLL 0x08 /* sqlite3GetFuncCollSeq() might be called */
|
||||||
#define SQLITE_FUNC_PRIVATE 0x10 /* Allowed for internal use only */
|
|
||||||
#define SQLITE_FUNC_COUNT 0x20 /* Built-in count(*) aggregate */
|
#define SQLITE_FUNC_COUNT 0x20 /* Built-in count(*) aggregate */
|
||||||
#define SQLITE_FUNC_COALESCE 0x40 /* Built-in coalesce() or ifnull() function */
|
#define SQLITE_FUNC_COALESCE 0x40 /* Built-in coalesce() or ifnull() function */
|
||||||
|
|
||||||
@@ -1322,8 +1297,6 @@ struct Table {
|
|||||||
#define TF_HasPrimaryKey 0x04 /* Table has a primary key */
|
#define TF_HasPrimaryKey 0x04 /* Table has a primary key */
|
||||||
#define TF_Autoincrement 0x08 /* Integer primary key is autoincrement */
|
#define TF_Autoincrement 0x08 /* Integer primary key is autoincrement */
|
||||||
#define TF_Virtual 0x10 /* Is a virtual table */
|
#define TF_Virtual 0x10 /* Is a virtual table */
|
||||||
#define TF_NeedMetadata 0x20 /* aCol[].zType and aCol[].pColl missing */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1485,19 +1458,19 @@ struct UnpackedRecord {
|
|||||||
*/
|
*/
|
||||||
struct Index {
|
struct Index {
|
||||||
char *zName; /* Name of this index */
|
char *zName; /* Name of this index */
|
||||||
int nColumn; /* Number of columns in the table used by this index */
|
|
||||||
int *aiColumn; /* Which columns are used by this index. 1st is 0 */
|
int *aiColumn; /* Which columns are used by this index. 1st is 0 */
|
||||||
tRowcnt *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */
|
tRowcnt *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */
|
||||||
Table *pTable; /* The SQL table being indexed */
|
Table *pTable; /* The SQL table being indexed */
|
||||||
int tnum; /* Page containing root of this index in database file */
|
|
||||||
u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
|
|
||||||
u8 autoIndex; /* True if is automatically created (ex: by UNIQUE) */
|
|
||||||
u8 bUnordered; /* Use this index for == or IN queries only */
|
|
||||||
char *zColAff; /* String defining the affinity of each column */
|
char *zColAff; /* String defining the affinity of each column */
|
||||||
Index *pNext; /* The next index associated with the same table */
|
Index *pNext; /* The next index associated with the same table */
|
||||||
Schema *pSchema; /* Schema containing this index */
|
Schema *pSchema; /* Schema containing this index */
|
||||||
u8 *aSortOrder; /* Array of size Index.nColumn. True==DESC, False==ASC */
|
u8 *aSortOrder; /* Array of size Index.nColumn. True==DESC, False==ASC */
|
||||||
char **azColl; /* Array of collation sequence names for index */
|
char **azColl; /* Array of collation sequence names for index */
|
||||||
|
int nColumn; /* Number of columns in the table used by this index */
|
||||||
|
int tnum; /* Page containing root of this index in database file */
|
||||||
|
u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
|
||||||
|
u8 autoIndex; /* True if is automatically created (ex: by UNIQUE) */
|
||||||
|
u8 bUnordered; /* Use this index for == or IN queries only */
|
||||||
#ifdef SQLITE_ENABLE_STAT3
|
#ifdef SQLITE_ENABLE_STAT3
|
||||||
int nSample; /* Number of elements in aSample[] */
|
int nSample; /* Number of elements in aSample[] */
|
||||||
tRowcnt avgEq; /* Average nEq value for key values not in aSample */
|
tRowcnt avgEq; /* Average nEq value for key values not in aSample */
|
||||||
@@ -1556,8 +1529,8 @@ struct AggInfo {
|
|||||||
** than the source table */
|
** than the source table */
|
||||||
int sortingIdx; /* Cursor number of the sorting index */
|
int sortingIdx; /* Cursor number of the sorting index */
|
||||||
int sortingIdxPTab; /* Cursor number of pseudo-table */
|
int sortingIdxPTab; /* Cursor number of pseudo-table */
|
||||||
ExprList *pGroupBy; /* The group by clause */
|
|
||||||
int nSortingColumn; /* Number of columns in the sorting index */
|
int nSortingColumn; /* Number of columns in the sorting index */
|
||||||
|
ExprList *pGroupBy; /* The group by clause */
|
||||||
struct AggInfo_col { /* For each column used in source tables */
|
struct AggInfo_col { /* For each column used in source tables */
|
||||||
Table *pTab; /* Source table */
|
Table *pTab; /* Source table */
|
||||||
int iTable; /* Cursor number of the source table */
|
int iTable; /* Cursor number of the source table */
|
||||||
@@ -2060,6 +2033,9 @@ struct Select {
|
|||||||
u8 op; /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */
|
u8 op; /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */
|
||||||
char affinity; /* MakeRecord with this affinity for SRT_Set */
|
char affinity; /* MakeRecord with this affinity for SRT_Set */
|
||||||
u16 selFlags; /* Various SF_* values */
|
u16 selFlags; /* Various SF_* values */
|
||||||
|
int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */
|
||||||
|
int addrOpenEphm[3]; /* OP_OpenEphem opcodes related to this select */
|
||||||
|
double nSelectRow; /* Estimated number of result rows */
|
||||||
SrcList *pSrc; /* The FROM clause */
|
SrcList *pSrc; /* The FROM clause */
|
||||||
Expr *pWhere; /* The WHERE clause */
|
Expr *pWhere; /* The WHERE clause */
|
||||||
ExprList *pGroupBy; /* The GROUP BY clause */
|
ExprList *pGroupBy; /* The GROUP BY clause */
|
||||||
@@ -2070,9 +2046,6 @@ struct Select {
|
|||||||
Select *pRightmost; /* Right-most select in a compound select statement */
|
Select *pRightmost; /* Right-most select in a compound select statement */
|
||||||
Expr *pLimit; /* LIMIT expression. NULL means not used. */
|
Expr *pLimit; /* LIMIT expression. NULL means not used. */
|
||||||
Expr *pOffset; /* OFFSET expression. NULL means not used. */
|
Expr *pOffset; /* OFFSET expression. NULL means not used. */
|
||||||
int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */
|
|
||||||
int addrOpenEphm[3]; /* OP_OpenEphem opcodes related to this select */
|
|
||||||
double nSelectRow; /* Estimated number of result rows */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2164,10 +2137,10 @@ struct AutoincInfo {
|
|||||||
*/
|
*/
|
||||||
struct TriggerPrg {
|
struct TriggerPrg {
|
||||||
Trigger *pTrigger; /* Trigger this program was coded from */
|
Trigger *pTrigger; /* Trigger this program was coded from */
|
||||||
int orconf; /* Default ON CONFLICT policy */
|
|
||||||
SubProgram *pProgram; /* Program implementing pTrigger/orconf */
|
|
||||||
u32 aColmask[2]; /* Masks of old.*, new.* columns accessed */
|
|
||||||
TriggerPrg *pNext; /* Next entry in Parse.pTriggerPrg list */
|
TriggerPrg *pNext; /* Next entry in Parse.pTriggerPrg list */
|
||||||
|
SubProgram *pProgram; /* Program implementing pTrigger/orconf */
|
||||||
|
int orconf; /* Default ON CONFLICT policy */
|
||||||
|
u32 aColmask[2]; /* Masks of old.*, new.* columns accessed */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2197,14 +2170,18 @@ struct TriggerPrg {
|
|||||||
*/
|
*/
|
||||||
struct Parse {
|
struct Parse {
|
||||||
sqlite3 *db; /* The main database structure */
|
sqlite3 *db; /* The main database structure */
|
||||||
int rc; /* Return code from execution */
|
|
||||||
char *zErrMsg; /* An error message */
|
char *zErrMsg; /* An error message */
|
||||||
Vdbe *pVdbe; /* An engine for executing database bytecode */
|
Vdbe *pVdbe; /* An engine for executing database bytecode */
|
||||||
|
int rc; /* Return code from execution */
|
||||||
u8 colNamesSet; /* TRUE after OP_ColumnName has been issued to pVdbe */
|
u8 colNamesSet; /* TRUE after OP_ColumnName has been issued to pVdbe */
|
||||||
u8 checkSchema; /* Causes schema cookie check after an error */
|
u8 checkSchema; /* Causes schema cookie check after an error */
|
||||||
u8 nested; /* Number of nested calls to the parser/code generator */
|
u8 nested; /* Number of nested calls to the parser/code generator */
|
||||||
u8 nTempReg; /* Number of temporary registers in aTempReg[] */
|
u8 nTempReg; /* Number of temporary registers in aTempReg[] */
|
||||||
u8 nTempInUse; /* Number of aTempReg[] currently checked out */
|
u8 nTempInUse; /* Number of aTempReg[] currently checked out */
|
||||||
|
u8 nColCache; /* Number of entries in aColCache[] */
|
||||||
|
u8 iColCache; /* Next entry in aColCache[] to replace */
|
||||||
|
u8 isMultiWrite; /* True if statement may modify/insert multiple rows */
|
||||||
|
u8 mayAbort; /* True if statement may throw an ABORT exception */
|
||||||
int aTempReg[8]; /* Holding area for temporary registers */
|
int aTempReg[8]; /* Holding area for temporary registers */
|
||||||
int nRangeReg; /* Size of the temporary register block */
|
int nRangeReg; /* Size of the temporary register block */
|
||||||
int iRangeReg; /* First register in temporary register block */
|
int iRangeReg; /* First register in temporary register block */
|
||||||
@@ -2216,8 +2193,6 @@ struct Parse {
|
|||||||
int ckBase; /* Base register of data during check constraints */
|
int ckBase; /* Base register of data during check constraints */
|
||||||
int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */
|
int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */
|
||||||
int iCacheCnt; /* Counter used to generate aColCache[].lru values */
|
int iCacheCnt; /* Counter used to generate aColCache[].lru values */
|
||||||
u8 nColCache; /* Number of entries in aColCache[] */
|
|
||||||
u8 iColCache; /* Next entry in aColCache[] to replace */
|
|
||||||
struct yColCache {
|
struct yColCache {
|
||||||
int iTable; /* Table cursor number */
|
int iTable; /* Table cursor number */
|
||||||
int iColumn; /* Table column number */
|
int iColumn; /* Table column number */
|
||||||
@@ -2228,61 +2203,63 @@ struct Parse {
|
|||||||
} aColCache[SQLITE_N_COLCACHE]; /* One for each column cache entry */
|
} aColCache[SQLITE_N_COLCACHE]; /* One for each column cache entry */
|
||||||
yDbMask writeMask; /* Start a write transaction on these databases */
|
yDbMask writeMask; /* Start a write transaction on these databases */
|
||||||
yDbMask cookieMask; /* Bitmask of schema verified databases */
|
yDbMask cookieMask; /* Bitmask of schema verified databases */
|
||||||
u8 isMultiWrite; /* True if statement may affect/insert multiple rows */
|
|
||||||
u8 mayAbort; /* True if statement may throw an ABORT exception */
|
|
||||||
int cookieGoto; /* Address of OP_Goto to cookie verifier subroutine */
|
int cookieGoto; /* Address of OP_Goto to cookie verifier subroutine */
|
||||||
int cookieValue[SQLITE_MAX_ATTACHED+2]; /* Values of cookies to verify */
|
int cookieValue[SQLITE_MAX_ATTACHED+2]; /* Values of cookies to verify */
|
||||||
|
int regRowid; /* Register holding rowid of CREATE TABLE entry */
|
||||||
|
int regRoot; /* Register holding root page number for new objects */
|
||||||
|
int nMaxArg; /* Max args passed to user function by sub-program */
|
||||||
#ifndef SQLITE_OMIT_SHARED_CACHE
|
#ifndef SQLITE_OMIT_SHARED_CACHE
|
||||||
int nTableLock; /* Number of locks in aTableLock */
|
int nTableLock; /* Number of locks in aTableLock */
|
||||||
TableLock *aTableLock; /* Required table locks for shared-cache mode */
|
TableLock *aTableLock; /* Required table locks for shared-cache mode */
|
||||||
#endif
|
#endif
|
||||||
int regRowid; /* Register holding rowid of CREATE TABLE entry */
|
|
||||||
int regRoot; /* Register holding root page number for new objects */
|
|
||||||
AutoincInfo *pAinc; /* Information about AUTOINCREMENT counters */
|
AutoincInfo *pAinc; /* Information about AUTOINCREMENT counters */
|
||||||
int nMaxArg; /* Max args passed to user function by sub-program */
|
|
||||||
|
|
||||||
/* Information used while coding trigger programs. */
|
/* Information used while coding trigger programs. */
|
||||||
Parse *pToplevel; /* Parse structure for main program (or NULL) */
|
Parse *pToplevel; /* Parse structure for main program (or NULL) */
|
||||||
Table *pTriggerTab; /* Table triggers are being coded for */
|
Table *pTriggerTab; /* Table triggers are being coded for */
|
||||||
|
double nQueryLoop; /* Estimated number of iterations of a query */
|
||||||
u32 oldmask; /* Mask of old.* columns referenced */
|
u32 oldmask; /* Mask of old.* columns referenced */
|
||||||
u32 newmask; /* Mask of new.* columns referenced */
|
u32 newmask; /* Mask of new.* columns referenced */
|
||||||
u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */
|
u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */
|
||||||
u8 eOrconf; /* Default ON CONFLICT policy for trigger steps */
|
u8 eOrconf; /* Default ON CONFLICT policy for trigger steps */
|
||||||
u8 disableTriggers; /* True to disable triggers */
|
u8 disableTriggers; /* True to disable triggers */
|
||||||
double nQueryLoop; /* Estimated number of iterations of a query */
|
|
||||||
|
|
||||||
/* Above is constant between recursions. Below is reset before and after
|
/* Above is constant between recursions. Below is reset before and after
|
||||||
** each recursion */
|
** each recursion */
|
||||||
|
|
||||||
int nVar; /* Number of '?' variables seen in the SQL so far */
|
int nVar; /* Number of '?' variables seen in the SQL so far */
|
||||||
int nzVar; /* Number of available slots in azVar[] */
|
int nzVar; /* Number of available slots in azVar[] */
|
||||||
char **azVar; /* Pointers to names of parameters */
|
u8 explain; /* True if the EXPLAIN flag is found on the query */
|
||||||
Vdbe *pReprepare; /* VM being reprepared (sqlite3Reprepare()) */
|
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
||||||
int nAlias; /* Number of aliased result set columns */
|
u8 declareVtab; /* True if inside sqlite3_declare_vtab() */
|
||||||
int *aAlias; /* Register used to hold aliased result */
|
int nVtabLock; /* Number of virtual tables to lock */
|
||||||
u8 explain; /* True if the EXPLAIN flag is found on the query */
|
#endif
|
||||||
Token sNameToken; /* Token with unqualified schema object name */
|
int nAlias; /* Number of aliased result set columns */
|
||||||
Token sLastToken; /* The last token parsed */
|
int nHeight; /* Expression tree height of current sub-select */
|
||||||
const char *zTail; /* All SQL text past the last semicolon parsed */
|
#ifndef SQLITE_OMIT_EXPLAIN
|
||||||
Table *pNewTable; /* A table being constructed by CREATE TABLE */
|
int iSelectId; /* ID of current select for EXPLAIN output */
|
||||||
|
int iNextSelectId; /* Next available select ID for EXPLAIN output */
|
||||||
|
#endif
|
||||||
|
char **azVar; /* Pointers to names of parameters */
|
||||||
|
Vdbe *pReprepare; /* VM being reprepared (sqlite3Reprepare()) */
|
||||||
|
int *aAlias; /* Register used to hold aliased result */
|
||||||
|
const char *zTail; /* All SQL text past the last semicolon parsed */
|
||||||
|
Table *pNewTable; /* A table being constructed by CREATE TABLE */
|
||||||
Trigger *pNewTrigger; /* Trigger under construct by a CREATE TRIGGER */
|
Trigger *pNewTrigger; /* Trigger under construct by a CREATE TRIGGER */
|
||||||
const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */
|
const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */
|
||||||
|
Token sNameToken; /* Token with unqualified schema object name */
|
||||||
|
Token sLastToken; /* The last token parsed */
|
||||||
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
||||||
Token sArg; /* Complete text of a module argument */
|
Token sArg; /* Complete text of a module argument */
|
||||||
u8 declareVtab; /* True if inside sqlite3_declare_vtab() */
|
Table **apVtabLock; /* Pointer to virtual tables needing locking */
|
||||||
int nVtabLock; /* Number of virtual tables to lock */
|
|
||||||
Table **apVtabLock; /* Pointer to virtual tables needing locking */
|
|
||||||
#endif
|
|
||||||
int nHeight; /* Expression tree height of current sub-select */
|
|
||||||
Table *pZombieTab; /* List of Table objects to delete after code gen */
|
|
||||||
TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */
|
|
||||||
|
|
||||||
#ifndef SQLITE_OMIT_EXPLAIN
|
|
||||||
int iSelectId;
|
|
||||||
int iNextSelectId;
|
|
||||||
#endif
|
#endif
|
||||||
|
Table *pZombieTab; /* List of Table objects to delete after code gen */
|
||||||
|
TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Return true if currently inside an sqlite3_declare_vtab() call.
|
||||||
|
*/
|
||||||
#ifdef SQLITE_OMIT_VIRTUALTABLE
|
#ifdef SQLITE_OMIT_VIRTUALTABLE
|
||||||
#define IN_DECLARE_VTAB 0
|
#define IN_DECLARE_VTAB 0
|
||||||
#else
|
#else
|
||||||
@@ -2433,8 +2410,8 @@ struct StrAccum {
|
|||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
sqlite3 *db; /* The database being initialized */
|
sqlite3 *db; /* The database being initialized */
|
||||||
int iDb; /* 0 for main database. 1 for TEMP, 2.. for ATTACHed */
|
|
||||||
char **pzErrMsg; /* Error message stored here */
|
char **pzErrMsg; /* Error message stored here */
|
||||||
|
int iDb; /* 0 for main database. 1 for TEMP, 2.. for ATTACHed */
|
||||||
int rc; /* Result code stored here */
|
int rc; /* Result code stored here */
|
||||||
} InitData;
|
} InitData;
|
||||||
|
|
||||||
|
@@ -2853,7 +2853,7 @@ case OP_AutoCommit: {
|
|||||||
** throw an ABORT exception), a statement transaction may also be opened.
|
** throw an ABORT exception), a statement transaction may also be opened.
|
||||||
** More specifically, a statement transaction is opened iff the database
|
** More specifically, a statement transaction is opened iff the database
|
||||||
** connection is currently not in autocommit mode, or if there are other
|
** connection is currently not in autocommit mode, or if there are other
|
||||||
** active statements. A statement transaction allows the affects of this
|
** active statements. A statement transaction allows the changes made by this
|
||||||
** VDBE to be rolled back after an error without having to roll back the
|
** VDBE to be rolled back after an error without having to roll back the
|
||||||
** entire transaction. If no error is encountered, the statement transaction
|
** entire transaction. If no error is encountered, the statement transaction
|
||||||
** will automatically commit when the VDBE halts.
|
** will automatically commit when the VDBE halts.
|
||||||
|
Reference in New Issue
Block a user