Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Have sqlite3_wal_checkpoint() populate the database handle error message and error code (as returned by sqlite3_errmsg() and sqlite3_errcode()). |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | wal |
Files: | files | file ages | folders |
SHA1: |
ff234cf574c7ae384ab1ebc79b2171ef |
User & Date: | dan 2010-05-03 12:14:16.000 |
Context
2010-05-03
| ||
13:37 | Make sure the mutex is held while calling sqlite3ApiExit() in sqlite3_wal_checkpoint(). Other cleanup of WAL logic. (check-in: 11a85b821a user: drh tags: wal) | |
12:14 | Have sqlite3_wal_checkpoint() populate the database handle error message and error code (as returned by sqlite3_errmsg() and sqlite3_errcode()). (check-in: ff234cf574 user: dan tags: wal) | |
11:05 | Add the "PRAGMA wal_autocheckpoint" command. Rename "PRAGMA checkpoint" to "PRAGMA wal_checkpoint". (check-in: 714e594726 user: dan tags: wal) | |
Changes
Changes to src/main.c.
︙ | ︙ | |||
1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 | sqlite3_mutex_enter(db->mutex); if( zDb ){ iDb = sqlite3FindDbName(db, zDb); } if( iDb<0 ){ rc = SQLITE_ERROR; }else{ rc = sqlite3Checkpoint(db, iDb); } sqlite3_mutex_leave(db->mutex); | > > | | 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 | sqlite3_mutex_enter(db->mutex); if( zDb ){ iDb = sqlite3FindDbName(db, zDb); } if( iDb<0 ){ rc = SQLITE_ERROR; sqlite3Error(db, SQLITE_ERROR, "unknown database: %s", zDb); }else{ rc = sqlite3Checkpoint(db, iDb); sqlite3Error(db, rc, 0); } sqlite3_mutex_leave(db->mutex); return sqlite3ApiExit(db, rc); } /* ** Run a checkpoint on database iDb. This is a no-op if database iDb is ** not currently open in WAL mode. ** ** If a transaction is open at either the database handle (db) or b-tree |
︙ | ︙ |
Changes to src/test1.c.
︙ | ︙ | |||
4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 | } rc = sqlite3_unlock_notify(db, test_unlock_notify_cb, (void *)interp); Tcl_SetResult(interp, (char *)t1ErrorName(rc), TCL_STATIC); return TCL_OK; } #endif /* ** tcl_objproc COMMANDNAME ARGS... ** ** Run a TCL command using its objProc interface. Throw an error if ** the command has no objProc interface. */ | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 | } rc = sqlite3_unlock_notify(db, test_unlock_notify_cb, (void *)interp); Tcl_SetResult(interp, (char *)t1ErrorName(rc), TCL_STATIC); return TCL_OK; } #endif /* ** tclcmd: sqlite3_wal_checkpoint db ?NAME? */ static int test_wal_checkpoint( ClientData clientData, /* Unused */ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ int objc, /* Number of arguments */ Tcl_Obj *CONST objv[] /* Command arguments */ ){ char *zDb = 0; sqlite3 *db; int rc; if( objc!=3 && objc!=2 ){ Tcl_WrongNumArgs(interp, 1, objv, "DB ?NAME?"); return TCL_ERROR; } if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ){ return TCL_ERROR; } if( objc==3 ){ zDb = Tcl_GetString(objv[2]); } rc = sqlite3_wal_checkpoint(db, zDb); Tcl_SetResult(interp, (char *)t1ErrorName(rc), TCL_STATIC); return TCL_OK; } /* ** tcl_objproc COMMANDNAME ARGS... ** ** Run a TCL command using its objProc interface. Throw an error if ** the command has no objProc interface. */ |
︙ | ︙ | |||
5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 | { "sqlite3_blob_read", test_blob_read, 0 }, { "sqlite3_blob_write", test_blob_write, 0 }, #endif { "pcache_stats", test_pcache_stats, 0 }, #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY { "sqlite3_unlock_notify", test_unlock_notify, 0 }, #endif }; static int bitmask_size = sizeof(Bitmask)*8; int i; extern int sqlite3_sync_count, sqlite3_fullsync_count; extern int sqlite3_opentemp_count; extern int sqlite3_like_count; extern int sqlite3_xferopt_count; | > | 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 | { "sqlite3_blob_read", test_blob_read, 0 }, { "sqlite3_blob_write", test_blob_write, 0 }, #endif { "pcache_stats", test_pcache_stats, 0 }, #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY { "sqlite3_unlock_notify", test_unlock_notify, 0 }, #endif { "sqlite3_wal_checkpoint", test_wal_checkpoint, 0 }, }; static int bitmask_size = sizeof(Bitmask)*8; int i; extern int sqlite3_sync_count, sqlite3_fullsync_count; extern int sqlite3_opentemp_count; extern int sqlite3_like_count; extern int sqlite3_xferopt_count; |
︙ | ︙ |
Changes to test/wal.test.
︙ | ︙ | |||
964 965 966 967 968 969 970 971 | } db2 eval { PRAGMA integrity_check } } {ok} catch { db close } catch { db2 close } finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 | } db2 eval { PRAGMA integrity_check } } {ok} catch { db close } catch { db2 close } #------------------------------------------------------------------------- # The following block of tests - wal-15.* - focus on testing the # implementation of the sqlite3_wal_checkpoint() interface. # file delete -force test.db test.db-wal sqlite3 db test.db do_test wal-15.1 { execsql { PRAGMA page_size = 1024; PRAGMA journal_mode = WAL; } execsql { CREATE TABLE t1(a, b); INSERT INTO t1 VALUES(1, 2); } } {} # Test that an error is returned if the database name is not recognized # do_test wal-15.2.1 { sqlite3_wal_checkpoint db aux } {SQLITE_ERROR} do_test wal-15.2.2 { sqlite3_errcode db } {SQLITE_ERROR} do_test wal-15.2.3 { sqlite3_errmsg db } {unknown database: aux} # Test that an error is returned if an attempt is made to checkpoint # if a transaction is open on the database. # do_test wal-15.3.1 { execsql { BEGIN; INSERT INTO t1 VALUES(3, 4); } sqlite3_wal_checkpoint db main } {SQLITE_LOCKED} do_test wal-15.3.2 { sqlite3_errcode db } {SQLITE_LOCKED} do_test wal-15.3.3 { sqlite3_errmsg db } {database table is locked} # Also test that an error is returned if the db cannot be checkpointed # because of locks held by another connection. # sqlite3 db2 test.db do_test wal-15.4.1 { execsql { BEGIN; SELECT * FROM t1; } db2 } {1 2} do_test wal-15.4.2 { execsql { COMMIT } sqlite3_wal_checkpoint db } {SQLITE_BUSY} do_test wal-15.4.3 { sqlite3_errmsg db } {database is locked} # After [db2] drops its lock, [db] may checkpoint the db. # do_test wal-15.4.4 { execsql { COMMIT } db2 sqlite3_wal_checkpoint db } {SQLITE_OK} do_test wal-15.4.5 { sqlite3_errmsg db } {not an error} do_test wal-15.4.6 { file size test.db } [expr 1024*2] catch { db2 close } catch { db close } finish_test |