mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
Refactor sqlite3.magic into sqlite3.eOpenState.
FossilOrigin-Name: e5d6512aa1fa0016a679c6e0cb665a0c67ad16f1daa0c18a96b2ebae1beefd15
This commit is contained in:
22
manifest
22
manifest
@@ -1,5 +1,5 @@
|
||||
C Fix\san\sRBU\sproblem\swith\srestarting\san\supdate\safter\sthe\s*-oal\sfile\sis\salready\slarger\sthan\s4GiB.
|
||||
D 2021-08-06T20:17:39.191
|
||||
C Refactor\ssqlite3.magic\sinto\ssqlite3.eOpenState.
|
||||
D 2021-08-07T23:16:52.446
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||
@@ -508,7 +508,7 @@ F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
|
||||
F src/insert.c 4ebff642574d3866316439b3dfce165f80e130e8969853c656d71b2afc5dd73c
|
||||
F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
|
||||
F src/loadext.c 0aa9e7f08e168e3874cb54984408e3976dafdf5616d511952c425b5ac088ea3e
|
||||
F src/main.c 5c8c47584612a60bd05c309aadbbfa4728824df0a94148d2a4e7e97d34676a22
|
||||
F src/main.c 9abeb9f542008eca3db9eb4d863be6c9eb778a07ff48d97d0af5fe98374055f3
|
||||
F src/malloc.c cbc93cdd429c4594912017d92ab656e2579aca64dbd1c6888551275bed46f25b
|
||||
F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
|
||||
F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de
|
||||
@@ -549,12 +549,12 @@ F src/shell.c.in 24b99dae8818d1a234732d73f4d5b49f12b510bc62735a41c04e314fafae09e
|
||||
F src/sqlite.h.in 43fcf0fe2af04081f420a906fc020bde1243851ba44b0aa567a27f94bf8c3145
|
||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||
F src/sqlite3ext.h e97f4e9b509408fea4c4e9bef5a41608dfac343b4d3c7a990dedde1e19af9510
|
||||
F src/sqliteInt.h c12ad0bda10276615f042c78317270c12502d7b301656516384c0f76d9fa8b77
|
||||
F src/sqliteInt.h 7406ab363796bfc5b3e91924dc4086a9daf3e5f427db923d0d952765e5136ec5
|
||||
F src/sqliteLimit.h d7323ffea5208c6af2734574bae933ca8ed2ab728083caa117c9738581a31657
|
||||
F src/status.c 4b8bc2a6905163a38b739854a35b826c737333fab5b1f8e03fa7eb9a4799c4c1
|
||||
F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1
|
||||
F src/tclsqlite.c 05663f6b5010b044eac0ef22fc8fb5ea3406d2502700a898261683258042c88b
|
||||
F src/test1.c 2100f4c28bae21ce83a9a0c5ec6827efd0e15d11b93b569b614daa5654b3fcf6
|
||||
F src/test1.c 63761c2be2607f1b425fde991beda48aed384f8d67f2b4ee549174c88b433009
|
||||
F src/test2.c 3efb99ab7f1fc8d154933e02ae1378bac9637da5
|
||||
F src/test3.c 61798bb0d38b915067a8c8e03f5a534b431181f802659a6616f9b4ff7d872644
|
||||
F src/test4.c 7c4420e01c577b5c4add2cb03119743b1a357543d347773b9e717195ea967159
|
||||
@@ -614,7 +614,7 @@ F src/trigger.c 3f612ce5f0858b6c23460a3c799d01f408b49b0b29d931d8b8e6fc224a8667de
|
||||
F src/update.c 69c4c10bc6873a80c0a77cb578f9fc60ee90003d03f9530bc3370fa24615772d
|
||||
F src/upsert.c 8789047a8f0a601ea42fa0256d1ba3190c13746b6ba940fe2d25643a7e991937
|
||||
F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0
|
||||
F src/util.c c5dd51a245d621deb98e33c9db048111e58fc3af008bdcc6197c7044af0c8b79
|
||||
F src/util.c e9fd5c474691a7c913dfc971f01cf6d3a3d5954db04e0764a6426f845505e692
|
||||
F src/vacuum.c 454973a59fb20bb982efc2df568a098616db6328a0491b6e84e2e07f7333db45
|
||||
F src/vdbe.c b73a5ec9940185eb001ff8cff2cfd429bb438c7e89f2885e0bfdb56c3ff13386
|
||||
F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe
|
||||
@@ -626,7 +626,7 @@ F src/vdbemem.c 53881aa0a7845922a075b3f375695588618098871a7a4120af4c297b80fa3e64
|
||||
F src/vdbesort.c cd5130f683706c1a43e165a74187745fb3351cb56052cf9dc91de820634bbde2
|
||||
F src/vdbetrace.c 666c6fd9f1b62be6999e072a45b913e3c2c3518bc60dfd4d54fe304130acb724
|
||||
F src/vdbevtab.c f99b275366c5fc5e2d99f734729880994ab9500bdafde7fae3b02d562b9d323c
|
||||
F src/vtab.c 75bdaec808be883b8bb69a1f0a479c3a359823c5a85a26497cd5d90d3c30b74b
|
||||
F src/vtab.c 88404ac1517903b3eb2abe256772ee95bb09f81ac0a17e13afe5d467df4de4ee
|
||||
F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
||||
F src/wal.c 2be08331d798237ad5d7ae0b252700ffb2b63189cb18d993496d009a93e2f81c
|
||||
F src/wal.h c3aa7825bfa2fe0d85bef2db94655f99870a285778baa36307c0a16da32b226a
|
||||
@@ -1920,7 +1920,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P 5c0f9ea98a2b944857fe05d53a0143cb827b7d8215c37f33f1bce47ec1189952
|
||||
R 031a22d26158ce5e8d5ab23ad625bcf1
|
||||
U dan
|
||||
Z a43027e17c934fafb82cd4d4ece727af
|
||||
P 087b8b41c6ed76b55c11315e7e95679d67590be20ae21108b593d00bb7d1c57a
|
||||
R 56f3f3302aa9f24a162fee58d25cbe2b
|
||||
U drh
|
||||
Z 8ec916b30c9fee315b610a0f44e54d61
|
||||
|
@@ -1 +1 @@
|
||||
087b8b41c6ed76b55c11315e7e95679d67590be20ae21108b593d00bb7d1c57a
|
||||
e5d6512aa1fa0016a679c6e0cb665a0c67ad16f1daa0c18a96b2ebae1beefd15
|
16
src/main.c
16
src/main.c
@@ -1242,7 +1242,7 @@ static int sqlite3Close(sqlite3 *db, int forceZombie){
|
||||
|
||||
/* Convert the connection into a zombie and then close it.
|
||||
*/
|
||||
db->magic = SQLITE_MAGIC_ZOMBIE;
|
||||
db->eOpenState = SQLITE_STATE_ZOMBIE;
|
||||
sqlite3LeaveMutexAndCloseZombie(db);
|
||||
return SQLITE_OK;
|
||||
}
|
||||
@@ -1306,7 +1306,7 @@ void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
|
||||
** or if the connection has not yet been closed by sqlite3_close_v2(),
|
||||
** then just leave the mutex and return.
|
||||
*/
|
||||
if( db->magic!=SQLITE_MAGIC_ZOMBIE || connectionIsBusy(db) ){
|
||||
if( db->eOpenState!=SQLITE_STATE_ZOMBIE || connectionIsBusy(db) ){
|
||||
sqlite3_mutex_leave(db->mutex);
|
||||
return;
|
||||
}
|
||||
@@ -1392,7 +1392,7 @@ void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
|
||||
sqlite3_free(db->auth.zAuthPW);
|
||||
#endif
|
||||
|
||||
db->magic = SQLITE_MAGIC_ERROR;
|
||||
db->eOpenState = SQLITE_STATE_ERROR;
|
||||
|
||||
/* The temp-database schema is allocated differently from the other schema
|
||||
** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()).
|
||||
@@ -1402,7 +1402,7 @@ void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
|
||||
*/
|
||||
sqlite3DbFree(db, db->aDb[1].pSchema);
|
||||
sqlite3_mutex_leave(db->mutex);
|
||||
db->magic = SQLITE_MAGIC_CLOSED;
|
||||
db->eOpenState = SQLITE_STATE_CLOSED;
|
||||
sqlite3_mutex_free(db->mutex);
|
||||
assert( sqlite3LookasideUsed(db,0)==0 );
|
||||
if( db->lookaside.bMalloced ){
|
||||
@@ -1790,7 +1790,7 @@ int sqlite3_busy_timeout(sqlite3 *db, int ms){
|
||||
*/
|
||||
void sqlite3_interrupt(sqlite3 *db){
|
||||
#ifdef SQLITE_ENABLE_API_ARMOR
|
||||
if( !sqlite3SafetyCheckOk(db) && (db==0 || db->magic!=SQLITE_MAGIC_ZOMBIE) ){
|
||||
if( !sqlite3SafetyCheckOk(db) && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE) ){
|
||||
(void)SQLITE_MISUSE_BKPT;
|
||||
return;
|
||||
}
|
||||
@@ -3193,7 +3193,7 @@ static int openDatabase(
|
||||
sqlite3_mutex_enter(db->mutex);
|
||||
db->errMask = 0xff;
|
||||
db->nDb = 2;
|
||||
db->magic = SQLITE_MAGIC_BUSY;
|
||||
db->eOpenState = SQLITE_STATE_BUSY;
|
||||
db->aDb = db->aDbStatic;
|
||||
db->lookaside.bDisable = 1;
|
||||
db->lookaside.sz = 0;
|
||||
@@ -3353,7 +3353,7 @@ static int openDatabase(
|
||||
db->aDb[1].zDbSName = "temp";
|
||||
db->aDb[1].safety_level = PAGER_SYNCHRONOUS_OFF;
|
||||
|
||||
db->magic = SQLITE_MAGIC_OPEN;
|
||||
db->eOpenState = SQLITE_STATE_OPEN;
|
||||
if( db->mallocFailed ){
|
||||
goto opendb_out;
|
||||
}
|
||||
@@ -3420,7 +3420,7 @@ opendb_out:
|
||||
sqlite3_close(db);
|
||||
db = 0;
|
||||
}else if( rc!=SQLITE_OK ){
|
||||
db->magic = SQLITE_MAGIC_SICK;
|
||||
db->eOpenState = SQLITE_STATE_SICK;
|
||||
}
|
||||
*ppDb = db;
|
||||
#ifdef SQLITE_ENABLE_SQLLOG
|
||||
|
@@ -1533,8 +1533,8 @@ struct sqlite3 {
|
||||
u8 mTrace; /* zero or more SQLITE_TRACE flags */
|
||||
u8 noSharedCache; /* True if no shared-cache backends */
|
||||
u8 nSqlExec; /* Number of pending OP_SqlExec opcodes */
|
||||
u8 eOpenState; /* Current condition of the connection */
|
||||
int nextPagesize; /* Pagesize after VACUUM if >0 */
|
||||
u32 magic; /* Magic number for detect library misuse */
|
||||
i64 nChange; /* Value returned by sqlite3_changes() */
|
||||
i64 nTotalChange; /* Value returned by sqlite3_total_changes() */
|
||||
int aLimit[SQLITE_N_LIMIT]; /* Limits */
|
||||
@@ -1762,16 +1762,16 @@ struct sqlite3 {
|
||||
#define ConstFactorOk(P) ((P)->okConstFactor)
|
||||
|
||||
/*
|
||||
** Possible values for the sqlite.magic field.
|
||||
** Possible values for the sqlite.eOpenState field.
|
||||
** The numbers are obtained at random and have no special meaning, other
|
||||
** than being distinct from one another.
|
||||
*/
|
||||
#define SQLITE_MAGIC_OPEN 0xa029a697 /* Database is open */
|
||||
#define SQLITE_MAGIC_CLOSED 0x9f3c2d33 /* Database is closed */
|
||||
#define SQLITE_MAGIC_SICK 0x4b771290 /* Error and awaiting close */
|
||||
#define SQLITE_MAGIC_BUSY 0xf03b7906 /* Database currently in use */
|
||||
#define SQLITE_MAGIC_ERROR 0xb5357930 /* An SQLITE_MISUSE error occurred */
|
||||
#define SQLITE_MAGIC_ZOMBIE 0x64cffc7f /* Close with last statement close */
|
||||
#define SQLITE_STATE_OPEN 0xa0 /* Database is open */
|
||||
#define SQLITE_STATE_CLOSED 0x9f /* Database is closed */
|
||||
#define SQLITE_STATE_SICK 0x4b /* Error and awaiting close */
|
||||
#define SQLITE_STATE_BUSY 0xf0 /* Database currently in use */
|
||||
#define SQLITE_STATE_ERROR 0xb5 /* An SQLITE_MISUSE error occurred */
|
||||
#define SQLITE_STATE_ZOMBIE 0x64 /* Close with last statement close */
|
||||
|
||||
/*
|
||||
** Each SQL function is defined by an instance of the following
|
||||
|
32
src/test1.c
32
src/test1.c
@@ -5348,37 +5348,6 @@ static int SQLITE_TCLAPI test_stmt_int(
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
** Usage: sqlite_set_magic DB MAGIC-NUMBER
|
||||
**
|
||||
** Set the db->magic value. This is used to test error recovery logic.
|
||||
*/
|
||||
static int SQLITE_TCLAPI sqlite_set_magic(
|
||||
void * clientData,
|
||||
Tcl_Interp *interp,
|
||||
int argc,
|
||||
char **argv
|
||||
){
|
||||
sqlite3 *db;
|
||||
if( argc!=3 ){
|
||||
Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
|
||||
" DB MAGIC", 0);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
if( getDbPointer(interp, argv[1], &db) ) return TCL_ERROR;
|
||||
if( strcmp(argv[2], "SQLITE_MAGIC_OPEN")==0 ){
|
||||
db->magic = SQLITE_MAGIC_OPEN;
|
||||
}else if( strcmp(argv[2], "SQLITE_MAGIC_CLOSED")==0 ){
|
||||
db->magic = SQLITE_MAGIC_CLOSED;
|
||||
}else if( strcmp(argv[2], "SQLITE_MAGIC_BUSY")==0 ){
|
||||
db->magic = SQLITE_MAGIC_BUSY;
|
||||
}else if( strcmp(argv[2], "SQLITE_MAGIC_ERROR")==0 ){
|
||||
db->magic = SQLITE_MAGIC_ERROR;
|
||||
}else if( Tcl_GetInt(interp, argv[2], (int*)&db->magic) ){
|
||||
return TCL_ERROR;
|
||||
}
|
||||
return TCL_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
** Usage: sqlite3_interrupt DB
|
||||
@@ -8319,7 +8288,6 @@ int Sqlitetest1_Init(Tcl_Interp *interp){
|
||||
{ "breakpoint", (Tcl_CmdProc*)test_breakpoint },
|
||||
{ "sqlite3_key", (Tcl_CmdProc*)test_key },
|
||||
{ "sqlite3_rekey", (Tcl_CmdProc*)test_rekey },
|
||||
{ "sqlite_set_magic", (Tcl_CmdProc*)sqlite_set_magic },
|
||||
{ "sqlite3_interrupt", (Tcl_CmdProc*)test_interrupt },
|
||||
{ "sqlite_delete_function", (Tcl_CmdProc*)delete_function },
|
||||
{ "sqlite_delete_collation", (Tcl_CmdProc*)delete_collation },
|
||||
|
16
src/util.c
16
src/util.c
@@ -1399,13 +1399,13 @@ static void logBadConnection(const char *zType){
|
||||
** used as an argument to sqlite3_errmsg() or sqlite3_close().
|
||||
*/
|
||||
int sqlite3SafetyCheckOk(sqlite3 *db){
|
||||
u32 magic;
|
||||
u8 eOpenState;
|
||||
if( db==0 ){
|
||||
logBadConnection("NULL");
|
||||
return 0;
|
||||
}
|
||||
magic = db->magic;
|
||||
if( magic!=SQLITE_MAGIC_OPEN ){
|
||||
eOpenState = db->eOpenState;
|
||||
if( eOpenState!=SQLITE_STATE_OPEN ){
|
||||
if( sqlite3SafetyCheckSickOrOk(db) ){
|
||||
testcase( sqlite3GlobalConfig.xLog!=0 );
|
||||
logBadConnection("unopened");
|
||||
@@ -1416,11 +1416,11 @@ int sqlite3SafetyCheckOk(sqlite3 *db){
|
||||
}
|
||||
}
|
||||
int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
|
||||
u32 magic;
|
||||
magic = db->magic;
|
||||
if( magic!=SQLITE_MAGIC_SICK &&
|
||||
magic!=SQLITE_MAGIC_OPEN &&
|
||||
magic!=SQLITE_MAGIC_BUSY ){
|
||||
u8 eOpenState;
|
||||
eOpenState = db->eOpenState;
|
||||
if( eOpenState!=SQLITE_STATE_SICK &&
|
||||
eOpenState!=SQLITE_STATE_OPEN &&
|
||||
eOpenState!=SQLITE_STATE_BUSY ){
|
||||
testcase( sqlite3GlobalConfig.xLog!=0 );
|
||||
logBadConnection("invalid");
|
||||
return 0;
|
||||
|
@@ -205,7 +205,8 @@ void sqlite3VtabUnlock(VTable *pVTab){
|
||||
|
||||
assert( db );
|
||||
assert( pVTab->nRef>0 );
|
||||
assert( db->magic==SQLITE_MAGIC_OPEN || db->magic==SQLITE_MAGIC_ZOMBIE );
|
||||
assert( db->eOpenState==SQLITE_STATE_OPEN
|
||||
|| db->eOpenState==SQLITE_STATE_ZOMBIE );
|
||||
|
||||
pVTab->nRef--;
|
||||
if( pVTab->nRef==0 ){
|
||||
|
Reference in New Issue
Block a user