Fossil SCM
Improvements to the SQLite error logging output format.
Commit
b30e35fcd23978877417703c77f02baf5655a615
Parent
99fea6cde4ac105…
1 file changed
+36
-1
+36
-1
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -348,14 +348,49 @@ | ||
| 348 | 348 | cgi_printf("<p><font color=\"red\">%h</font></p>", z); |
| 349 | 349 | }else{ |
| 350 | 350 | fprintf(stderr, "%s: %s\n", g.argv[0], z); |
| 351 | 351 | } |
| 352 | 352 | } |
| 353 | + | |
| 354 | +/* | |
| 355 | +** Return a name for an SQLite error code | |
| 356 | +*/ | |
| 357 | +static const char *sqlite_error_code_name(int iCode){ | |
| 358 | + static char zCode[30]; | |
| 359 | + switch( iCode & 0xff ){ | |
| 360 | + case SQLITE_OK: return "SQLITE_OK"; | |
| 361 | + case SQLITE_ERROR: return "SQLITE_ERROR"; | |
| 362 | + case SQLITE_PERM: return "SQLITE_PERM"; | |
| 363 | + case SQLITE_ABORT: return "SQLITE_ABORT"; | |
| 364 | + case SQLITE_BUSY: return "SQLITE_BUSY"; | |
| 365 | + case SQLITE_NOMEM: return "SQLITE_NOMEM"; | |
| 366 | + case SQLITE_READONLY: return "SQLITE_READONLY"; | |
| 367 | + case SQLITE_INTERRUPT: return "SQLITE_INTERRUPT"; | |
| 368 | + case SQLITE_IOERR: return "SQLITE_IOERR"; | |
| 369 | + case SQLITE_CORRUPT: return "SQLITE_CORRUPT"; | |
| 370 | + case SQLITE_FULL: return "SQLITE_FULL"; | |
| 371 | + case SQLITE_CANTOPEN: return "SQLITE_CANTOPEN"; | |
| 372 | + case SQLITE_PROTOCOL: return "SQLITE_PROTOCOL"; | |
| 373 | + case SQLITE_EMPTY: return "SQLITE_EMPTY"; | |
| 374 | + case SQLITE_SCHEMA: return "SQLITE_SCHEMA"; | |
| 375 | + case SQLITE_CONSTRAINT: return "SQLITE_CONSTRAINT"; | |
| 376 | + case SQLITE_MISMATCH: return "SQLITE_MISMATCH"; | |
| 377 | + case SQLITE_MISUSE: return "SQLITE_MISUSE"; | |
| 378 | + case SQLITE_NOLFS: return "SQLITE_NOLFS"; | |
| 379 | + case SQLITE_FORMAT: return "SQLITE_FORMAT"; | |
| 380 | + case SQLITE_RANGE: return "SQLITE_RANGE"; | |
| 381 | + case SQLITE_NOTADB: return "SQLITE_NOTADB"; | |
| 382 | + default: { | |
| 383 | + sqlite3_snprintf(sizeof(zCode),zCode,"error code %d",iCode); | |
| 384 | + } | |
| 385 | + } | |
| 386 | + return zCode; | |
| 387 | +} | |
| 353 | 388 | |
| 354 | 389 | /* Error logs from SQLite */ |
| 355 | 390 | void fossil_sqlite_log(void *notUsed, int iCode, const char *zErrmsg){ |
| 356 | - fossil_warning("SQLite error log (code %d): %s", iCode, zErrmsg); | |
| 391 | + fossil_warning("%s: %s", sqlite_error_code_name(iCode), zErrmsg); | |
| 357 | 392 | } |
| 358 | 393 | |
| 359 | 394 | /* |
| 360 | 395 | ** Print a usage comment and quit |
| 361 | 396 | */ |
| 362 | 397 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -348,14 +348,49 @@ | |
| 348 | cgi_printf("<p><font color=\"red\">%h</font></p>", z); |
| 349 | }else{ |
| 350 | fprintf(stderr, "%s: %s\n", g.argv[0], z); |
| 351 | } |
| 352 | } |
| 353 | |
| 354 | /* Error logs from SQLite */ |
| 355 | void fossil_sqlite_log(void *notUsed, int iCode, const char *zErrmsg){ |
| 356 | fossil_warning("SQLite error log (code %d): %s", iCode, zErrmsg); |
| 357 | } |
| 358 | |
| 359 | /* |
| 360 | ** Print a usage comment and quit |
| 361 | */ |
| 362 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -348,14 +348,49 @@ | |
| 348 | cgi_printf("<p><font color=\"red\">%h</font></p>", z); |
| 349 | }else{ |
| 350 | fprintf(stderr, "%s: %s\n", g.argv[0], z); |
| 351 | } |
| 352 | } |
| 353 | |
| 354 | /* |
| 355 | ** Return a name for an SQLite error code |
| 356 | */ |
| 357 | static const char *sqlite_error_code_name(int iCode){ |
| 358 | static char zCode[30]; |
| 359 | switch( iCode & 0xff ){ |
| 360 | case SQLITE_OK: return "SQLITE_OK"; |
| 361 | case SQLITE_ERROR: return "SQLITE_ERROR"; |
| 362 | case SQLITE_PERM: return "SQLITE_PERM"; |
| 363 | case SQLITE_ABORT: return "SQLITE_ABORT"; |
| 364 | case SQLITE_BUSY: return "SQLITE_BUSY"; |
| 365 | case SQLITE_NOMEM: return "SQLITE_NOMEM"; |
| 366 | case SQLITE_READONLY: return "SQLITE_READONLY"; |
| 367 | case SQLITE_INTERRUPT: return "SQLITE_INTERRUPT"; |
| 368 | case SQLITE_IOERR: return "SQLITE_IOERR"; |
| 369 | case SQLITE_CORRUPT: return "SQLITE_CORRUPT"; |
| 370 | case SQLITE_FULL: return "SQLITE_FULL"; |
| 371 | case SQLITE_CANTOPEN: return "SQLITE_CANTOPEN"; |
| 372 | case SQLITE_PROTOCOL: return "SQLITE_PROTOCOL"; |
| 373 | case SQLITE_EMPTY: return "SQLITE_EMPTY"; |
| 374 | case SQLITE_SCHEMA: return "SQLITE_SCHEMA"; |
| 375 | case SQLITE_CONSTRAINT: return "SQLITE_CONSTRAINT"; |
| 376 | case SQLITE_MISMATCH: return "SQLITE_MISMATCH"; |
| 377 | case SQLITE_MISUSE: return "SQLITE_MISUSE"; |
| 378 | case SQLITE_NOLFS: return "SQLITE_NOLFS"; |
| 379 | case SQLITE_FORMAT: return "SQLITE_FORMAT"; |
| 380 | case SQLITE_RANGE: return "SQLITE_RANGE"; |
| 381 | case SQLITE_NOTADB: return "SQLITE_NOTADB"; |
| 382 | default: { |
| 383 | sqlite3_snprintf(sizeof(zCode),zCode,"error code %d",iCode); |
| 384 | } |
| 385 | } |
| 386 | return zCode; |
| 387 | } |
| 388 | |
| 389 | /* Error logs from SQLite */ |
| 390 | void fossil_sqlite_log(void *notUsed, int iCode, const char *zErrmsg){ |
| 391 | fossil_warning("%s: %s", sqlite_error_code_name(iCode), zErrmsg); |
| 392 | } |
| 393 | |
| 394 | /* |
| 395 | ** Print a usage comment and quit |
| 396 | */ |
| 397 |