Fossil SCM

Do not drop the accesslog table on a rebuild. If the accesslog table does not exist, do not generate and error on the User-Log report.

drh 2011-01-19 16:28 trunk
Commit f1efc9059545e0caaffb619eda6586a2fd772bb1
3 files changed +21 -11 +1 -1 +3 -4
+21 -11
--- src/db.c
+++ src/db.c
@@ -191,37 +191,47 @@
191191
/*
192192
** Prepare a Stmt. Assume that the Stmt is previously uninitialized.
193193
** If the input string contains multiple SQL statements, only the first
194194
** one is processed. All statements beyond the first are silently ignored.
195195
*/
196
-int db_vprepare(Stmt *pStmt, const char *zFormat, va_list ap){
196
+int db_vprepare(Stmt *pStmt, int errOk, const char *zFormat, va_list ap){
197
+ int rc;
197198
char *zSql;
198199
blob_zero(&pStmt->sql);
199200
blob_vappendf(&pStmt->sql, zFormat, ap);
200201
va_end(ap);
201202
zSql = blob_str(&pStmt->sql);
202
- if( sqlite3_prepare_v2(g.db, zSql, -1, &pStmt->pStmt, 0)!=0 ){
203
+ rc = sqlite3_prepare_v2(g.db, zSql, -1, &pStmt->pStmt, 0);
204
+ if( rc!=0 && !errOk ){
203205
db_err("%s\n%s", sqlite3_errmsg(g.db), zSql);
204206
}
205207
pStmt->pNext = pStmt->pPrev = 0;
206208
pStmt->nStep = 0;
207
- return 0;
209
+ return rc;
208210
}
209211
int db_prepare(Stmt *pStmt, const char *zFormat, ...){
210212
int rc;
211213
va_list ap;
212214
va_start(ap, zFormat);
213
- rc = db_vprepare(pStmt, zFormat, ap);
215
+ rc = db_vprepare(pStmt, 0, zFormat, ap);
216
+ va_end(ap);
217
+ return rc;
218
+}
219
+int db_prepare_ignore_error(Stmt *pStmt, const char *zFormat, ...){
220
+ int rc;
221
+ va_list ap;
222
+ va_start(ap, zFormat);
223
+ rc = db_vprepare(pStmt, 1, zFormat, ap);
214224
va_end(ap);
215225
return rc;
216226
}
217227
int db_static_prepare(Stmt *pStmt, const char *zFormat, ...){
218228
int rc = SQLITE_OK;
219229
if( blob_size(&pStmt->sql)==0 ){
220230
va_list ap;
221231
va_start(ap, zFormat);
222
- rc = db_vprepare(pStmt, zFormat, ap);
232
+ rc = db_vprepare(pStmt, 0, zFormat, ap);
223233
pStmt->pNext = pAllStmt;
224234
pStmt->pPrev = 0;
225235
if( pAllStmt ) pAllStmt->pPrev = pStmt;
226236
pAllStmt = pStmt;
227237
va_end(ap);
@@ -444,11 +454,11 @@
444454
i64 db_int64(i64 iDflt, const char *zSql, ...){
445455
va_list ap;
446456
Stmt s;
447457
i64 rc;
448458
va_start(ap, zSql);
449
- db_vprepare(&s, zSql, ap);
459
+ db_vprepare(&s, 0, zSql, ap);
450460
va_end(ap);
451461
if( db_step(&s)!=SQLITE_ROW ){
452462
rc = iDflt;
453463
}else{
454464
rc = db_column_int64(&s, 0);
@@ -459,11 +469,11 @@
459469
int db_int(int iDflt, const char *zSql, ...){
460470
va_list ap;
461471
Stmt s;
462472
int rc;
463473
va_start(ap, zSql);
464
- db_vprepare(&s, zSql, ap);
474
+ db_vprepare(&s, 0, zSql, ap);
465475
va_end(ap);
466476
if( db_step(&s)!=SQLITE_ROW ){
467477
rc = iDflt;
468478
}else{
469479
rc = db_column_int(&s, 0);
@@ -479,11 +489,11 @@
479489
int db_exists(const char *zSql, ...){
480490
va_list ap;
481491
Stmt s;
482492
int rc;
483493
va_start(ap, zSql);
484
- db_vprepare(&s, zSql, ap);
494
+ db_vprepare(&s, 0, zSql, ap);
485495
va_end(ap);
486496
if( db_step(&s)!=SQLITE_ROW ){
487497
rc = 0;
488498
}else{
489499
rc = 1;
@@ -499,11 +509,11 @@
499509
double db_double(double rDflt, const char *zSql, ...){
500510
va_list ap;
501511
Stmt s;
502512
double r;
503513
va_start(ap, zSql);
504
- db_vprepare(&s, zSql, ap);
514
+ db_vprepare(&s, 0, zSql, ap);
505515
va_end(ap);
506516
if( db_step(&s)!=SQLITE_ROW ){
507517
r = rDflt;
508518
}else{
509519
r = db_column_double(&s, 0);
@@ -518,11 +528,11 @@
518528
*/
519529
void db_blob(Blob *pResult, const char *zSql, ...){
520530
va_list ap;
521531
Stmt s;
522532
va_start(ap, zSql);
523
- db_vprepare(&s, zSql, ap);
533
+ db_vprepare(&s, 0, zSql, ap);
524534
va_end(ap);
525535
if( db_step(&s)==SQLITE_ROW ){
526536
blob_append(pResult, sqlite3_column_blob(s.pStmt, 0),
527537
sqlite3_column_bytes(s.pStmt, 0));
528538
}
@@ -538,11 +548,11 @@
538548
char *db_text(char *zDefault, const char *zSql, ...){
539549
va_list ap;
540550
Stmt s;
541551
char *z;
542552
va_start(ap, zSql);
543
- db_vprepare(&s, zSql, ap);
553
+ db_vprepare(&s, 0, zSql, ap);
544554
va_end(ap);
545555
if( db_step(&s)==SQLITE_ROW ){
546556
z = mprintf("%s", sqlite3_column_text(s.pStmt, 0));
547557
}else if( zDefault ){
548558
z = mprintf("%s", zDefault);
549559
--- src/db.c
+++ src/db.c
@@ -191,37 +191,47 @@
191 /*
192 ** Prepare a Stmt. Assume that the Stmt is previously uninitialized.
193 ** If the input string contains multiple SQL statements, only the first
194 ** one is processed. All statements beyond the first are silently ignored.
195 */
196 int db_vprepare(Stmt *pStmt, const char *zFormat, va_list ap){
 
197 char *zSql;
198 blob_zero(&pStmt->sql);
199 blob_vappendf(&pStmt->sql, zFormat, ap);
200 va_end(ap);
201 zSql = blob_str(&pStmt->sql);
202 if( sqlite3_prepare_v2(g.db, zSql, -1, &pStmt->pStmt, 0)!=0 ){
 
203 db_err("%s\n%s", sqlite3_errmsg(g.db), zSql);
204 }
205 pStmt->pNext = pStmt->pPrev = 0;
206 pStmt->nStep = 0;
207 return 0;
208 }
209 int db_prepare(Stmt *pStmt, const char *zFormat, ...){
210 int rc;
211 va_list ap;
212 va_start(ap, zFormat);
213 rc = db_vprepare(pStmt, zFormat, ap);
 
 
 
 
 
 
 
 
214 va_end(ap);
215 return rc;
216 }
217 int db_static_prepare(Stmt *pStmt, const char *zFormat, ...){
218 int rc = SQLITE_OK;
219 if( blob_size(&pStmt->sql)==0 ){
220 va_list ap;
221 va_start(ap, zFormat);
222 rc = db_vprepare(pStmt, zFormat, ap);
223 pStmt->pNext = pAllStmt;
224 pStmt->pPrev = 0;
225 if( pAllStmt ) pAllStmt->pPrev = pStmt;
226 pAllStmt = pStmt;
227 va_end(ap);
@@ -444,11 +454,11 @@
444 i64 db_int64(i64 iDflt, const char *zSql, ...){
445 va_list ap;
446 Stmt s;
447 i64 rc;
448 va_start(ap, zSql);
449 db_vprepare(&s, zSql, ap);
450 va_end(ap);
451 if( db_step(&s)!=SQLITE_ROW ){
452 rc = iDflt;
453 }else{
454 rc = db_column_int64(&s, 0);
@@ -459,11 +469,11 @@
459 int db_int(int iDflt, const char *zSql, ...){
460 va_list ap;
461 Stmt s;
462 int rc;
463 va_start(ap, zSql);
464 db_vprepare(&s, zSql, ap);
465 va_end(ap);
466 if( db_step(&s)!=SQLITE_ROW ){
467 rc = iDflt;
468 }else{
469 rc = db_column_int(&s, 0);
@@ -479,11 +489,11 @@
479 int db_exists(const char *zSql, ...){
480 va_list ap;
481 Stmt s;
482 int rc;
483 va_start(ap, zSql);
484 db_vprepare(&s, zSql, ap);
485 va_end(ap);
486 if( db_step(&s)!=SQLITE_ROW ){
487 rc = 0;
488 }else{
489 rc = 1;
@@ -499,11 +509,11 @@
499 double db_double(double rDflt, const char *zSql, ...){
500 va_list ap;
501 Stmt s;
502 double r;
503 va_start(ap, zSql);
504 db_vprepare(&s, zSql, ap);
505 va_end(ap);
506 if( db_step(&s)!=SQLITE_ROW ){
507 r = rDflt;
508 }else{
509 r = db_column_double(&s, 0);
@@ -518,11 +528,11 @@
518 */
519 void db_blob(Blob *pResult, const char *zSql, ...){
520 va_list ap;
521 Stmt s;
522 va_start(ap, zSql);
523 db_vprepare(&s, zSql, ap);
524 va_end(ap);
525 if( db_step(&s)==SQLITE_ROW ){
526 blob_append(pResult, sqlite3_column_blob(s.pStmt, 0),
527 sqlite3_column_bytes(s.pStmt, 0));
528 }
@@ -538,11 +548,11 @@
538 char *db_text(char *zDefault, const char *zSql, ...){
539 va_list ap;
540 Stmt s;
541 char *z;
542 va_start(ap, zSql);
543 db_vprepare(&s, zSql, ap);
544 va_end(ap);
545 if( db_step(&s)==SQLITE_ROW ){
546 z = mprintf("%s", sqlite3_column_text(s.pStmt, 0));
547 }else if( zDefault ){
548 z = mprintf("%s", zDefault);
549
--- src/db.c
+++ src/db.c
@@ -191,37 +191,47 @@
191 /*
192 ** Prepare a Stmt. Assume that the Stmt is previously uninitialized.
193 ** If the input string contains multiple SQL statements, only the first
194 ** one is processed. All statements beyond the first are silently ignored.
195 */
196 int db_vprepare(Stmt *pStmt, int errOk, const char *zFormat, va_list ap){
197 int rc;
198 char *zSql;
199 blob_zero(&pStmt->sql);
200 blob_vappendf(&pStmt->sql, zFormat, ap);
201 va_end(ap);
202 zSql = blob_str(&pStmt->sql);
203 rc = sqlite3_prepare_v2(g.db, zSql, -1, &pStmt->pStmt, 0);
204 if( rc!=0 && !errOk ){
205 db_err("%s\n%s", sqlite3_errmsg(g.db), zSql);
206 }
207 pStmt->pNext = pStmt->pPrev = 0;
208 pStmt->nStep = 0;
209 return rc;
210 }
211 int db_prepare(Stmt *pStmt, const char *zFormat, ...){
212 int rc;
213 va_list ap;
214 va_start(ap, zFormat);
215 rc = db_vprepare(pStmt, 0, zFormat, ap);
216 va_end(ap);
217 return rc;
218 }
219 int db_prepare_ignore_error(Stmt *pStmt, const char *zFormat, ...){
220 int rc;
221 va_list ap;
222 va_start(ap, zFormat);
223 rc = db_vprepare(pStmt, 1, zFormat, ap);
224 va_end(ap);
225 return rc;
226 }
227 int db_static_prepare(Stmt *pStmt, const char *zFormat, ...){
228 int rc = SQLITE_OK;
229 if( blob_size(&pStmt->sql)==0 ){
230 va_list ap;
231 va_start(ap, zFormat);
232 rc = db_vprepare(pStmt, 0, zFormat, ap);
233 pStmt->pNext = pAllStmt;
234 pStmt->pPrev = 0;
235 if( pAllStmt ) pAllStmt->pPrev = pStmt;
236 pAllStmt = pStmt;
237 va_end(ap);
@@ -444,11 +454,11 @@
454 i64 db_int64(i64 iDflt, const char *zSql, ...){
455 va_list ap;
456 Stmt s;
457 i64 rc;
458 va_start(ap, zSql);
459 db_vprepare(&s, 0, zSql, ap);
460 va_end(ap);
461 if( db_step(&s)!=SQLITE_ROW ){
462 rc = iDflt;
463 }else{
464 rc = db_column_int64(&s, 0);
@@ -459,11 +469,11 @@
469 int db_int(int iDflt, const char *zSql, ...){
470 va_list ap;
471 Stmt s;
472 int rc;
473 va_start(ap, zSql);
474 db_vprepare(&s, 0, zSql, ap);
475 va_end(ap);
476 if( db_step(&s)!=SQLITE_ROW ){
477 rc = iDflt;
478 }else{
479 rc = db_column_int(&s, 0);
@@ -479,11 +489,11 @@
489 int db_exists(const char *zSql, ...){
490 va_list ap;
491 Stmt s;
492 int rc;
493 va_start(ap, zSql);
494 db_vprepare(&s, 0, zSql, ap);
495 va_end(ap);
496 if( db_step(&s)!=SQLITE_ROW ){
497 rc = 0;
498 }else{
499 rc = 1;
@@ -499,11 +509,11 @@
509 double db_double(double rDflt, const char *zSql, ...){
510 va_list ap;
511 Stmt s;
512 double r;
513 va_start(ap, zSql);
514 db_vprepare(&s, 0, zSql, ap);
515 va_end(ap);
516 if( db_step(&s)!=SQLITE_ROW ){
517 r = rDflt;
518 }else{
519 r = db_column_double(&s, 0);
@@ -518,11 +528,11 @@
528 */
529 void db_blob(Blob *pResult, const char *zSql, ...){
530 va_list ap;
531 Stmt s;
532 va_start(ap, zSql);
533 db_vprepare(&s, 0, zSql, ap);
534 va_end(ap);
535 if( db_step(&s)==SQLITE_ROW ){
536 blob_append(pResult, sqlite3_column_blob(s.pStmt, 0),
537 sqlite3_column_bytes(s.pStmt, 0));
538 }
@@ -538,11 +548,11 @@
548 char *db_text(char *zDefault, const char *zSql, ...){
549 va_list ap;
550 Stmt s;
551 char *z;
552 va_start(ap, zSql);
553 db_vprepare(&s, 0, zSql, ap);
554 va_end(ap);
555 if( db_step(&s)==SQLITE_ROW ){
556 z = mprintf("%s", sqlite3_column_text(s.pStmt, 0));
557 }else if( zDefault ){
558 z = mprintf("%s", zDefault);
559
+1 -1
--- src/rebuild.c
+++ src/rebuild.c
@@ -262,11 +262,11 @@
262262
zTable = db_text(0,
263263
"SELECT name FROM sqlite_master /*scan*/"
264264
" WHERE type='table'"
265265
" AND name NOT IN ('blob','delta','rcvfrom','user',"
266266
"'config','shun','private','reportfmt',"
267
- "'concealed')"
267
+ "'concealed','accesslog')"
268268
" AND name NOT GLOB 'sqlite_*'"
269269
);
270270
if( zTable==0 ) break;
271271
db_multi_exec("DROP TABLE %Q", zTable);
272272
free(zTable);
273273
--- src/rebuild.c
+++ src/rebuild.c
@@ -262,11 +262,11 @@
262 zTable = db_text(0,
263 "SELECT name FROM sqlite_master /*scan*/"
264 " WHERE type='table'"
265 " AND name NOT IN ('blob','delta','rcvfrom','user',"
266 "'config','shun','private','reportfmt',"
267 "'concealed')"
268 " AND name NOT GLOB 'sqlite_*'"
269 );
270 if( zTable==0 ) break;
271 db_multi_exec("DROP TABLE %Q", zTable);
272 free(zTable);
273
--- src/rebuild.c
+++ src/rebuild.c
@@ -262,11 +262,11 @@
262 zTable = db_text(0,
263 "SELECT name FROM sqlite_master /*scan*/"
264 " WHERE type='table'"
265 " AND name NOT IN ('blob','delta','rcvfrom','user',"
266 "'config','shun','private','reportfmt',"
267 "'concealed','accesslog')"
268 " AND name NOT GLOB 'sqlite_*'"
269 );
270 if( zTable==0 ) break;
271 db_multi_exec("DROP TABLE %Q", zTable);
272 free(zTable);
273
+3 -4
--- src/user.c
+++ src/user.c
@@ -397,14 +397,14 @@
397397
*/
398398
void access_log_page(void){
399399
int y = atoi(PD("y","3"));
400400
int n = atoi(PD("n","50"));
401401
int skip = atoi(PD("o","0"));
402
- const char *zNow;
403402
Blob sql;
404403
Stmt q;
405404
int cnt = 0;
405
+ int rc;
406406
407407
login_check_credentials();
408408
if( !g.okAdmin ){ login_needed(); return; }
409409
410410
if( P("delall") && P("delallbtn") ){
@@ -439,16 +439,15 @@
439439
if( skip ){
440440
style_submenu_element("Newer", "Newer entries",
441441
"%s/access_log?o=%d&n=%d&y=%d", g.zTop, skip>=n ? skip-n : 0,
442442
n, y);
443443
}
444
- db_prepare(&q, blob_str(&sql));
445
- zNow = db_text(0, "SELECT datetime('now','localtime');");
444
+ rc = db_prepare_ignore_error(&q, blob_str(&sql));
446445
@ <center><table border="1" cellpadding="5">
447446
@ <tr><th width="33%%">Date</th><th width="34%%">User</th>
448447
@ <th width="33%%">IP Address</th></tr>
449
- while( db_step(&q)==SQLITE_ROW ){
448
+ while( rc==SQLITE_OK && db_step(&q)==SQLITE_ROW ){
450449
const char *zName = db_column_text(&q, 0);
451450
const char *zIP = db_column_text(&q, 1);
452451
const char *zDate = db_column_text(&q, 2);
453452
int bSuccess = db_column_int(&q, 3);
454453
cnt++;
455454
--- src/user.c
+++ src/user.c
@@ -397,14 +397,14 @@
397 */
398 void access_log_page(void){
399 int y = atoi(PD("y","3"));
400 int n = atoi(PD("n","50"));
401 int skip = atoi(PD("o","0"));
402 const char *zNow;
403 Blob sql;
404 Stmt q;
405 int cnt = 0;
 
406
407 login_check_credentials();
408 if( !g.okAdmin ){ login_needed(); return; }
409
410 if( P("delall") && P("delallbtn") ){
@@ -439,16 +439,15 @@
439 if( skip ){
440 style_submenu_element("Newer", "Newer entries",
441 "%s/access_log?o=%d&n=%d&y=%d", g.zTop, skip>=n ? skip-n : 0,
442 n, y);
443 }
444 db_prepare(&q, blob_str(&sql));
445 zNow = db_text(0, "SELECT datetime('now','localtime');");
446 @ <center><table border="1" cellpadding="5">
447 @ <tr><th width="33%%">Date</th><th width="34%%">User</th>
448 @ <th width="33%%">IP Address</th></tr>
449 while( db_step(&q)==SQLITE_ROW ){
450 const char *zName = db_column_text(&q, 0);
451 const char *zIP = db_column_text(&q, 1);
452 const char *zDate = db_column_text(&q, 2);
453 int bSuccess = db_column_int(&q, 3);
454 cnt++;
455
--- src/user.c
+++ src/user.c
@@ -397,14 +397,14 @@
397 */
398 void access_log_page(void){
399 int y = atoi(PD("y","3"));
400 int n = atoi(PD("n","50"));
401 int skip = atoi(PD("o","0"));
 
402 Blob sql;
403 Stmt q;
404 int cnt = 0;
405 int rc;
406
407 login_check_credentials();
408 if( !g.okAdmin ){ login_needed(); return; }
409
410 if( P("delall") && P("delallbtn") ){
@@ -439,16 +439,15 @@
439 if( skip ){
440 style_submenu_element("Newer", "Newer entries",
441 "%s/access_log?o=%d&n=%d&y=%d", g.zTop, skip>=n ? skip-n : 0,
442 n, y);
443 }
444 rc = db_prepare_ignore_error(&q, blob_str(&sql));
 
445 @ <center><table border="1" cellpadding="5">
446 @ <tr><th width="33%%">Date</th><th width="34%%">User</th>
447 @ <th width="33%%">IP Address</th></tr>
448 while( rc==SQLITE_OK && db_step(&q)==SQLITE_ROW ){
449 const char *zName = db_column_text(&q, 0);
450 const char *zIP = db_column_text(&q, 1);
451 const char *zDate = db_column_text(&q, 2);
452 int bSuccess = db_column_int(&q, 3);
453 cnt++;
454

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button