]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add the ".log" command to the shell. This shows that some errors are logged
authordrh <drh@noemail.net>
Tue, 23 Feb 2010 01:47:00 +0000 (01:47 +0000)
committerdrh <drh@noemail.net>
Tue, 23 Feb 2010 01:47:00 +0000 (01:47 +0000)
multiple times and other errors are never logged at all.

FossilOrigin-Name: 6d910245ad0097521cf1619449cc3d202137b8b8

manifest
manifest.uuid
src/shell.c
src/util.c

index a06283e83c620f419625b83248ccbc9841583fea..c851c5f870e3536dc95efd19f2f7eefb5768deff 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,8 +1,8 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-C Remove\sthe\s".genfkey"\scommand\sfrom\sthe\sshell.\s\sWe've\shad\sforeign-key\ssupport\nin\sthe\score\ssince\s3.6.19.\s\sAnyone\swho\sstill\sneeds\sthe\ssimulated\sforeign-key\ntriggers\scan\salways\sgenerate\sthem\swith\san\solder\sversion\sof\sthe\sshell.
-D 2010-02-23T01:01:59
+C Add\sthe\s".log"\scommand\sto\sthe\sshell.\s\sThis\sshows\sthat\ssome\serrors\sare\slogged\nmultiple\stimes\sand\sother\serrors\sare\snever\slogged\sat\sall.
+D 2010-02-23T01:47:00
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in c5827ead754ab32b9585487177c93bb00b9497b3
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -167,7 +167,7 @@ F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
 F src/resolve.c a1648d98e869937b29f4f697461fe4d60f220a7b
 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697
 F src/select.c 0109b993c360d649857523abb72919e1794f9b45
-F src/shell.c 285a9a83bebd12265841cea7e84f4b6088fe676e
+F src/shell.c 31cd555125a1fda4a6d8dce019690f043a8e5d75
 F src/sqlite.h.in 16f33c1ceb971bfa7a04a73039947630f445146e
 F src/sqlite3ext.h 69dfb8116af51b84a029cddb3b35062354270c89
 F src/sqliteInt.h d5fe1c8335b5bf376639837fa42124327cdb6767
@@ -211,7 +211,7 @@ F src/tokenize.c e7f3606cc1b51a819a2bfee99100648d35bc791d
 F src/trigger.c 340c9eca0fb24b1197468d96ba059f867c9834c7
 F src/update.c c0dc6b75ad28b76b619042d934f337b02acee208
 F src/utf.c dad16adcc0c35ef2437dca125a4b07419d361052
-F src/util.c 88b16cd614f42cbbe22e48633f220506e38fa654
+F src/util.c 5b5353ff9427422b0bb89a5bc8ddf818399c0401
 F src/vacuum.c 28ee5a4963d16cf2477075d85966c0f461cd79de
 F src/vdbe.c 428411c6fbd49e9a4ce043dad87a0b079d403714
 F src/vdbe.h bea1f0cd530775bdb58a340265f3cf3ee920e9b2
@@ -794,14 +794,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 86d50ce57feb78440956192e37a03686ffa1e196
-R d7e4885c2790f006c9fb03f523fb52e7
+P c4401fc93b66c5339422d7e765a4a32b1ef96bdb
+R 1b44bf57e7d9a663688d30603c70b44c
 U drh
-Z ce6478007e315584d717adb0d5a3c11c
+Z 75784795cda6fd26f0b8feb0805d2536
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.6 (GNU/Linux)
 
-iD8DBQFLgykLoxKgR168RlERAtBUAJ0WyBEJgyN2CRLORdcgGbStXZq3KQCdEb8r
-rzZD4GEkFRgOhQAEyCwafJo=
-=dDQ/
+iD8DBQFLgzOYoxKgR168RlERAgluAJ9q3mIeRrQvfpzpmiNDDWtRun1WrQCeME9w
+x+Fdmmhc/ksLrbX58/ixhCk=
+=d2xc
 -----END PGP SIGNATURE-----
index dda01bb4800669bbb5d3a1691a439c6962734cbf..f774487e2645524b4e19885efeff7380800979cc 100644 (file)
@@ -1 +1 @@
-c4401fc93b66c5339422d7e765a4a32b1ef96bdb
\ No newline at end of file
+6d910245ad0097521cf1619449cc3d202137b8b8
\ No newline at end of file
index fdf6db7171d16e073294fa60959e6ca16b690aaf..525a450e9a5ee3644de09012495aa28cd611392a 100644 (file)
@@ -415,6 +415,7 @@ struct callback_data {
   char outfile[FILENAME_MAX]; /* Filename for *out */
   const char *zDbFilename;    /* name of the database file */
   sqlite3_stmt *pStmt;   /* Current statement if any. */
+  FILE *pLog;            /* Write log output here */
 };
 
 /*
@@ -457,6 +458,16 @@ static int strlen30(const char *z){
   return 0x3fffffff & (int)(z2 - z);
 }
 
+/*
+** A callback for the sqlite3_log() interface.
+*/
+static void shellLog(void *pArg, int iErrCode, const char *zMsg){
+  struct callback_data *p = (struct callback_data*)pArg;
+  if( p->pLog==0 ) return;
+  fprintf(p->pLog, "(%d) %s\n", iErrCode, zMsg);
+  fflush(p->pLog);
+}
+
 /*
 ** Output the given string as a hex-encoded blob (eg. X'1234' )
 */
@@ -1223,6 +1234,7 @@ static char zHelp[] =
 #ifndef SQLITE_OMIT_LOAD_EXTENSION
   ".load FILE ?ENTRY?     Load an extension library\n"
 #endif
+  ".log FILE|off          Turn logging on or off.  FILE can be stderr/stdout\n"
   ".mode MODE ?TABLE?     Set output mode where MODE is one of:\n"
   "                         csv      Comma-separated values\n"
   "                         column   Left-aligned columns.  (See .width)\n"
@@ -1738,6 +1750,26 @@ static int do_meta_command(char *zLine, struct callback_data *p){
   }else
 #endif
 
+  if( c=='l' && strncmp(azArg[0], "log", n)==0 && nArg>=1 ){
+    const char *zFile = azArg[1];
+    if( p->pLog && p->pLog!=stdout && p->pLog!=stderr ){
+      fclose(p->pLog);
+      p->pLog = 0;
+    }
+    if( strcmp(zFile,"stdout")==0 ){
+      p->pLog = stdout;
+    }else if( strcmp(zFile, "stderr")==0 ){
+      p->pLog = stderr;
+    }else if( strcmp(zFile, "off")==0 ){
+      p->pLog = 0;
+    }else{
+      p->pLog = fopen(zFile, "w");
+      if( p->pLog==0 ){
+        fprintf(stderr, "Error: cannot open \"%s\"\n", zFile);
+      }
+    }
+  }else
+
   if( c=='m' && strncmp(azArg[0], "mode", n)==0 && nArg==2 ){
     int n2 = strlen30(azArg[1]);
     if( (n2==4 && strncmp(azArg[1],"line",n2)==0)
@@ -2383,6 +2415,7 @@ static void main_init(struct callback_data *data) {
   data->mode = MODE_List;
   memcpy(data->separator,"|", 2);
   data->showHeader = 0;
+  sqlite3_config(SQLITE_CONFIG_LOG, shellLog, data);
   sqlite3_snprintf(sizeof(mainPrompt), mainPrompt,"sqlite> ");
   sqlite3_snprintf(sizeof(continuePrompt), continuePrompt,"   ...> ");
 }
index 7bf2df8d93b4269c6d305e14f23c7bc8a627528c..c173b4f9cfcd5d26a26214c45575ef719cf042ef 100644 (file)
@@ -123,7 +123,7 @@ void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ...){
       va_start(ap, zFormat);
       z = sqlite3VMPrintf(db, zFormat, ap);
       va_end(ap);
-      sqlite3_log(err_code, z);
+      sqlite3_log(err_code, "%s", z);
       sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, SQLITE_DYNAMIC);
     }else{
       sqlite3ValueSetStr(db->pErr, 0, 0, SQLITE_UTF8, SQLITE_STATIC);