Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Do not complain about unfinalized SQL statements when exiting on a fatal error. Fix comments and indentation on the vfile_verify_not_phantom() function. |
|---|---|
| Downloads: | Tarball | ZIP archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
c2f5dbe65527d18339a570088f67022a |
| User & Date: | drh 2011-01-07 17:08:43.226 |
Context
|
2011-01-07
| ||
| 17:17 | Make phantom records a warning, not a fatal error, when trying to checkout or examine a check-in. ... (check-in: f7cff4ad13 user: drh tags: trunk) | |
| 17:08 | Do not complain about unfinalized SQL statements when exiting on a fatal error. Fix comments and indentation on the vfile_verify_not_phantom() function. ... (check-in: c2f5dbe655 user: drh tags: trunk) | |
| 16:20 | Merge the experimental export speed enhancement into trunk. ... (check-in: 7aaa2aa417 user: drh tags: trunk) | |
Changes
Changes to src/checkout.c.
| ︙ | ︙ | |||
288 289 290 291 292 293 294 |
void close_cmd(void){
int forceFlag = find_option("force","f",0)!=0;
db_must_be_within_tree();
if( !forceFlag && unsaved_changes()==1 ){
fossil_fatal("there are unsaved changes in the current checkout");
}
unlink_local_database(1);
| | | 288 289 290 291 292 293 294 295 296 297 |
void close_cmd(void){
int forceFlag = find_option("force","f",0)!=0;
db_must_be_within_tree();
if( !forceFlag && unsaved_changes()==1 ){
fossil_fatal("there are unsaved changes in the current checkout");
}
unlink_local_database(1);
db_close(1);
unlink_local_database(0);
}
|
Changes to src/clone.c.
| ︙ | ︙ | |||
55 56 57 58 59 60 61 |
}
zDefaultUser = find_option("admin-user","A",1);
url_parse(g.argv[2]);
if( g.urlIsFile ){
file_copy(g.urlName, g.argv[3]);
| | | 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
}
zDefaultUser = find_option("admin-user","A",1);
url_parse(g.argv[2]);
if( g.urlIsFile ){
file_copy(g.urlName, g.argv[3]);
db_close(1);
db_open_repository(g.argv[3]);
db_record_repository_filename(g.argv[3]);
db_multi_exec(
"REPLACE INTO config(name,value)"
" VALUES('server-code', lower(hex(randomblob(20))));"
"REPLACE INTO config(name,value)"
" VALUES('last-sync-url', '%q');",
|
| ︙ | ︙ | |||
96 97 98 99 100 101 102 |
);
url_enable_proxy(0);
g.xlinkClusterOnly = 1;
nErr = client_sync(0,0,1,CONFIGSET_ALL,0);
g.xlinkClusterOnly = 0;
verify_cancel();
db_end_transaction(0);
| | | 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
);
url_enable_proxy(0);
g.xlinkClusterOnly = 1;
nErr = client_sync(0,0,1,CONFIGSET_ALL,0);
g.xlinkClusterOnly = 0;
verify_cancel();
db_end_transaction(0);
db_close(1);
if( nErr ){
unlink(g.argv[3]);
fossil_fatal("server returned an error - clone aborted");
}
db_open_repository(g.argv[3]);
}
db_begin_transaction();
|
| ︙ | ︙ |
Changes to src/db.c.
| ︙ | ︙ | |||
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
if( rollbackFlag ) doRollback = 1;
nBegin--;
if( nBegin==0 ){
int i;
for(i=0; doRollback==0 && i<nCommitHook; i++){
doRollback |= aHook[i].xHook();
}
db_multi_exec(doRollback ? "ROLLBACK" : "COMMIT");
doRollback = 0;
}
}
void db_force_rollback(void){
static int busy = 0;
if( busy || g.db==0 ) return;
busy = 1;
undo_rollback();
if( nBegin ){
sqlite3_exec(g.db, "ROLLBACK", 0, 0, 0);
nBegin = 0;
if( isNewRepo ){
| > > > > > > > > > > | > | 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
if( rollbackFlag ) doRollback = 1;
nBegin--;
if( nBegin==0 ){
int i;
for(i=0; doRollback==0 && i<nCommitHook; i++){
doRollback |= aHook[i].xHook();
}
while( pAllStmt ){
db_finalize(pAllStmt);
}
db_multi_exec(doRollback ? "ROLLBACK" : "COMMIT");
doRollback = 0;
}
}
/*
** Force a rollback and shutdown the database
*/
void db_force_rollback(void){
static int busy = 0;
if( busy || g.db==0 ) return;
busy = 1;
undo_rollback();
while( pAllStmt ){
db_finalize(pAllStmt);
}
if( nBegin ){
sqlite3_exec(g.db, "ROLLBACK", 0, 0, 0);
nBegin = 0;
if( isNewRepo ){
db_close(0);
unlink(g.zRepositoryName);
}
}
busy = 0;
db_close(0);
}
/*
** Install a commit hook. Hooks are installed in sequence order.
** It is an error to install the same commit hook more than once.
**
** Each commit hook is called (in order of accending sequence) at
|
| ︙ | ︙ | |||
918 919 920 921 922 923 924 |
file_canonical_name(g.argv[2], &repo);
zRepo = blob_str(&repo);
if( access(zRepo, 0) ){
fossil_fatal("no such file: %s", zRepo);
}
db_open_or_attach(zRepo, "test_repo");
db_lset("repository", blob_str(&repo));
| | > > > | | 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 |
file_canonical_name(g.argv[2], &repo);
zRepo = blob_str(&repo);
if( access(zRepo, 0) ){
fossil_fatal("no such file: %s", zRepo);
}
db_open_or_attach(zRepo, "test_repo");
db_lset("repository", blob_str(&repo));
db_close(1);
}
/*
** Open the local database. If unable, exit with an error.
*/
void db_must_be_within_tree(void){
if( db_open_local()==0 ){
fossil_fatal("not within an open checkout");
}
db_open_repository(0);
db_verify_schema();
}
/*
** Close the database connection.
**
** Check for unfinalized statements and report errors if the reportErrors
** argument is true. Ignore unfinalized statements when false.
*/
void db_close(int reportErrors){
sqlite3_stmt *pStmt;
if( g.db==0 ) return;
if( g.fSqlTrace ){
int cur, hiwtr;
sqlite3_db_status(g.db, SQLITE_DBSTATUS_LOOKASIDE_USED, &cur, &hiwtr, 0);
fprintf(stderr, "-- LOOKASIDE_USED %10d %10d\n", cur, hiwtr);
sqlite3_db_status(g.db, SQLITE_DBSTATUS_LOOKASIDE_HIT, &cur, &hiwtr, 0);
|
| ︙ | ︙ | |||
969 970 971 972 973 974 975 |
fprintf(stderr, "-- PCACHE_OVFLOW %10d %10d\n", cur, hiwtr);
}
while( pAllStmt ){
db_finalize(pAllStmt);
}
db_end_transaction(1);
pStmt = 0;
| > | | > | 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 |
fprintf(stderr, "-- PCACHE_OVFLOW %10d %10d\n", cur, hiwtr);
}
while( pAllStmt ){
db_finalize(pAllStmt);
}
db_end_transaction(1);
pStmt = 0;
if( reportErrors ){
while( (pStmt = sqlite3_next_stmt(g.db, pStmt))!=0 ){
fossil_warning("unfinalized SQL statement: [%s]", sqlite3_sql(pStmt));
}
}
g.repositoryOpen = 0;
g.localOpen = 0;
g.configOpen = 0;
sqlite3_wal_checkpoint(g.db, 0);
sqlite3_close(g.db);
g.db = 0;
|
| ︙ | ︙ |
Changes to src/main.c.
| ︙ | ︙ | |||
292 293 294 295 296 297 298 |
#endif
}
/*
** Exit. Take care to close the database first.
*/
void fossil_exit(int rc){
| | | 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 |
#endif
}
/*
** Exit. Take care to close the database first.
*/
void fossil_exit(int rc){
db_close(1);
exit(rc);
}
/*
** Print an error message, rollback all databases, and quit. These
** routines never return.
*/
|
| ︙ | ︙ | |||
835 836 837 838 839 840 841 |
}
if( stat(zRepo, &sStat)!=0 ){
fossil_fatal("cannot stat() repository: %s", zRepo);
}
setgid(sStat.st_gid);
setuid(sStat.st_uid);
if( g.db!=0 ){
| | | 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 |
}
if( stat(zRepo, &sStat)!=0 ){
fossil_fatal("cannot stat() repository: %s", zRepo);
}
setgid(sStat.st_gid);
setuid(sStat.st_uid);
if( g.db!=0 ){
db_close(1);
db_open_repository(zRepo);
}
}
#endif
return zRepo;
}
|
| ︙ | ︙ | |||
1017 1018 1019 1020 1021 1022 1023 |
}
if( blob_eq(&key, "repository:") && blob_token(&line, &value) ){
db_open_repository(blob_str(&value));
blob_reset(&value);
continue;
}
if( blob_eq(&key, "directory:") && blob_token(&line, &value) ){
| | | 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 |
}
if( blob_eq(&key, "repository:") && blob_token(&line, &value) ){
db_open_repository(blob_str(&value));
blob_reset(&value);
continue;
}
if( blob_eq(&key, "directory:") && blob_token(&line, &value) ){
db_close(1);
g.zRepositoryName = mprintf("%s", blob_str(&value));
blob_reset(&value);
continue;
}
if( blob_eq(&key, "notfound:") && blob_token(&line, &value) ){
zNotFound = mprintf("%s", blob_str(&value));
blob_reset(&value);
|
| ︙ | ︙ | |||
1226 1227 1228 1229 1230 1231 1232 |
}
}
#else
zBrowser = db_get("web-browser", "open");
#endif
zBrowserCmd = mprintf("%s http://localhost:%%d/ &", zBrowser);
}
| | | | 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 |
}
}
#else
zBrowser = db_get("web-browser", "open");
#endif
zBrowserCmd = mprintf("%s http://localhost:%%d/ &", zBrowser);
}
db_close(1);
if( cgi_http_server(iPort, mxPort, zBrowserCmd, flags) ){
fossil_fatal("unable to listen on TCP socket %d", iPort);
}
g.httpIn = stdin;
g.httpOut = stdout;
if( g.fHttpTrace || g.fSqlTrace ){
fprintf(stderr, "====== SERVER pid %d =======\n", getpid());
}
g.cgiOutput = 1;
find_server_repository(isUiCmd);
g.zRepositoryName = enter_chroot_jail(g.zRepositoryName);
cgi_handle_http_request(0);
process_one_web_page(zNotFound);
#else
/* Win32 implementation */
if( isUiCmd ){
zBrowser = db_get("web-browser", "start");
zBrowserCmd = mprintf("%s http://127.0.0.1:%%d/", zBrowser);
}
db_close(1);
win32_http_server(iPort, mxPort, zBrowserCmd, zStopperFile, zNotFound, flags);
#endif
}
|
Changes to src/rebuild.c.
| ︙ | ︙ | |||
362 363 364 365 366 367 368 |
if( g.argc==3 ){
db_open_repository(g.argv[2]);
}else{
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
if( g.argc!=2 ){
usage("?REPOSITORY-FILENAME?");
}
| | | 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 |
if( g.argc==3 ){
db_open_repository(g.argv[2]);
}else{
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
if( g.argc!=2 ){
usage("?REPOSITORY-FILENAME?");
}
db_close(1);
db_open_repository(g.zRepositoryName);
}
db_begin_transaction();
ttyOutput = 1;
errCnt = rebuild_db(randomizeFlag, 1);
db_multi_exec(
"REPLACE INTO config(name,value) VALUES('content-schema','%s');"
|
| ︙ | ︙ | |||
418 419 420 421 422 423 424 |
if( g.argc==3 ){
db_open_repository(g.argv[2]);
}else{
db_find_and_open_repository(0, 0);
if( g.argc!=2 ){
usage("?REPOSITORY-FILENAME?");
}
| | | 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 |
if( g.argc==3 ){
db_open_repository(g.argv[2]);
}else{
db_find_and_open_repository(0, 0);
if( g.argc!=2 ){
usage("?REPOSITORY-FILENAME?");
}
db_close(1);
db_open_repository(g.zRepositoryName);
}
db_begin_transaction();
create_cluster();
db_end_transaction(0);
}
|
| ︙ | ︙ |
Changes to src/shun.c.
| ︙ | ︙ | |||
46 47 48 49 50 51 52 |
char zCanonical[UUID_SIZE+1];
login_check_credentials();
if( !g.okAdmin ){
login_needed();
}
if( P("rebuild") ){
| | | 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
char zCanonical[UUID_SIZE+1];
login_check_credentials();
if( !g.okAdmin ){
login_needed();
}
if( P("rebuild") ){
db_close(1);
db_open_repository(g.zRepositoryName);
db_begin_transaction();
rebuild_db(0,0);
db_end_transaction(0);
}
if( zUuid ){
nUuid = strlen(zUuid);
|
| ︙ | ︙ |
Changes to src/sqlcmd.c.
| ︙ | ︙ | |||
77 78 79 80 81 82 83 |
** WARNING: Careless use of this command can corrupt a Fossil repository
** in ways that are unrecoverable. Be sure you know what you are doing before
** running any SQL commands that modifies the repository database.
*/
void sqlite3_cmd(void){
extern int sqlite3_shell(int, char**);
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
| | | 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
** WARNING: Careless use of this command can corrupt a Fossil repository
** in ways that are unrecoverable. Be sure you know what you are doing before
** running any SQL commands that modifies the repository database.
*/
void sqlite3_cmd(void){
extern int sqlite3_shell(int, char**);
db_find_and_open_repository(OPEN_ANY_SCHEMA, 0);
db_close(1);
sqlite3_shutdown();
sqlite3_shell(g.argc-1, g.argv+1);
}
/*
** This routine is called by the patched sqlite3 command-line shell in order
** to load the name and database connection for the open Fossil database.
|
| ︙ | ︙ |
Changes to src/vfile.c.
| ︙ | ︙ | |||
70 71 72 73 74 75 76 |
rid = content_new(zUuid);
}
return rid;
}
/*
** Verify that an object is not a phantom. If the object is
| | | > | 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
rid = content_new(zUuid);
}
return rid;
}
/*
** Verify that an object is not a phantom. If the object is
** a phantom, output an error message and quit.
*/
static void vfile_verify_not_phantom(
int rid, /* The RID to verify */
const char *zFilename, /* Filename. Might be NULL */
const char *zUuid /* UUID. Might be NULL */
){
if( db_int(-1, "SELECT size FROM blob WHERE rid=%d", rid)<0
&& (zUuid==0 || !db_exists("SELECT 1 FROM shun WHERE uuid='%s'",zUuid))
){
if( zFilename ){
fossil_fatal("content missing for %s", zFilename);
}else{
char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
if( zUuid ){
fossil_fatal("content missing for [%.10s]", zUuid);
}else{
|
| ︙ | ︙ |