From b373591c5e7e976e6e6779c027662f99ce02df22 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 10 Feb 2014 16:13:42 +0000 Subject: [PATCH 1/4] Modify the command-line shell to print a warning when using an in-memory database. FossilOrigin-Name: 90e9deae4a2bf63308a212226314aa7838c161d9 --- manifest | 15 +++++++++------ manifest.uuid | 2 +- src/shell.c | 9 +++++++++ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/manifest b/manifest index 9310c89691..afa8cdb9ea 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improvements\sto\sa\s"Synopsis:"\scomment\sin\sthe\sVDBE\sengine. -D 2014-02-10T15:56:34.917 +C Modify\sthe\scommand-line\sshell\sto\sprint\sa\swarning\swhen\susing\san\sin-memory\ndatabase. +D 2014-02-10T16:13:42.339 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -220,7 +220,7 @@ F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece F src/resolve.c 7eda9097b29fcf3d2b42fdc17d1de672134e09b6 F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0 F src/select.c c055a9fa25a4e7fc8c1652c44a31d6382dbb1e8a -F src/shell.c 7dedf7367ee49050b0366bf8dbc8ec2bd15b42c7 +F src/shell.c df7d96e50415a0aaf63a6cc96c15643229a603ac F src/sqlite.h.in eed7f7d66a60daaa7b4a597dcd9bad87aad9611b F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc @@ -1152,7 +1152,10 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P 010c48f671e909cb406f3716102a0032bc72a592 -R 578e19c460bd25472755ddb73b8e954a +P 0dfa7ee9157ea6b1c745732d6c3fcd066cf4f849 +R 795791e045aa26fa5bb54a48e6e7e719 +T *branch * memdb-warning +T *sym-memdb-warning * +T -sym-trunk * U drh -Z b51a63f783c162fa8d14eeaf754f2b2d +Z fcf385e884073e6fe85607df422ee196 diff --git a/manifest.uuid b/manifest.uuid index 2d5b959f98..349369484a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0dfa7ee9157ea6b1c745732d6c3fcd066cf4f849 \ No newline at end of file +90e9deae4a2bf63308a212226314aa7838c161d9 \ No newline at end of file diff --git a/src/shell.c b/src/shell.c index 8fa32105d9..395cf30b29 100644 --- a/src/shell.c +++ b/src/shell.c @@ -3520,6 +3520,7 @@ int main(int argc, char **argv){ char *zFirstCmd = 0; int i; int rc = 0; + int warnInmemoryDb = 0; if( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)!=0 ){ fprintf(stderr, "SQLite header and source version mismatch\n%s\n%s\n", @@ -3614,6 +3615,7 @@ int main(int argc, char **argv){ if( data.zDbFilename==0 ){ #ifndef SQLITE_OMIT_MEMORYDB data.zDbFilename = ":memory:"; + warnInmemoryDb = 1; #else fprintf(stderr,"%s: Error: no database filename specified\n", Argv0); return 1; @@ -3754,6 +3756,13 @@ int main(int argc, char **argv){ "Enter SQL statements terminated with a \";\"\n", sqlite3_libversion(), sqlite3_sourceid() ); + if( warnInmemoryDb ){ + printf( + "Warning: connected to an in-memory database. " + "Use \".open FILENAME\" to change\nto a persistent " + "on-disk database.\n" + ); + } zHome = find_home_dir(); if( zHome ){ nHistory = strlen30(zHome) + 20; From 1247aa4e4ae3ceaa92817a38c834f5c67fff950c Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 10 Feb 2014 19:27:05 +0000 Subject: [PATCH 2/4] In the command-line shell, on the banner, warn about the use of a transient in-memory database in bold red text. FossilOrigin-Name: 0fbc0fcec1b3a67065fa0ebb49375bf675789edc --- manifest | 15 ++++++--------- manifest.uuid | 2 +- src/shell.c | 39 +++++++++++++++++++++++++++++++-------- 3 files changed, 38 insertions(+), 18 deletions(-) diff --git a/manifest b/manifest index afa8cdb9ea..4419fb4d11 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Modify\sthe\scommand-line\sshell\sto\sprint\sa\swarning\swhen\susing\san\sin-memory\ndatabase. -D 2014-02-10T16:13:42.339 +C In\sthe\scommand-line\sshell,\son\sthe\sbanner,\swarn\sabout\sthe\suse\sof\sa\ntransient\sin-memory\sdatabase\sin\sbold\sred\stext. +D 2014-02-10T19:27:05.611 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -220,7 +220,7 @@ F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece F src/resolve.c 7eda9097b29fcf3d2b42fdc17d1de672134e09b6 F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0 F src/select.c c055a9fa25a4e7fc8c1652c44a31d6382dbb1e8a -F src/shell.c df7d96e50415a0aaf63a6cc96c15643229a603ac +F src/shell.c 7e4d5dcb21c860137748899d5025594cd993458e F src/sqlite.h.in eed7f7d66a60daaa7b4a597dcd9bad87aad9611b F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc @@ -1152,10 +1152,7 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P 0dfa7ee9157ea6b1c745732d6c3fcd066cf4f849 -R 795791e045aa26fa5bb54a48e6e7e719 -T *branch * memdb-warning -T *sym-memdb-warning * -T -sym-trunk * +P 90e9deae4a2bf63308a212226314aa7838c161d9 +R f1273e6958b105060eecb1997e0942c3 U drh -Z fcf385e884073e6fe85607df422ee196 +Z 7cce0cacf21f263fd79f8eafb0090d99 diff --git a/manifest.uuid b/manifest.uuid index 349369484a..5af2c88934 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -90e9deae4a2bf63308a212226314aa7838c161d9 \ No newline at end of file +0fbc0fcec1b3a67065fa0ebb49375bf675789edc \ No newline at end of file diff --git a/src/shell.c b/src/shell.c index 395cf30b29..82b1fdf96a 100644 --- a/src/shell.c +++ b/src/shell.c @@ -3500,6 +3500,29 @@ static void main_init(struct callback_data *data) { sqlite3_config(SQLITE_CONFIG_SINGLETHREAD); } +/* +** Arrange for subsequent text console output to be RED or normal. Use +** the SetConsoleTextAttribute() function on windows. On all other +** platforms, assume VT100 escape sequences are recognized. +*/ +#ifdef _WIN32 +static void outputRed(void){ + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_RED|FOREGROUND_INTENSITY); +} +static void outputNormal(void){ + SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), + FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); +} +#else +static void outputRed(void){ + printf("\033[1;31m"); +} +static void outputNormal(void){ + printf("\033[0m"); +} +#endif + /* ** Get the argument to an --option. Throw an error and die if no argument ** is available. @@ -3615,7 +3638,7 @@ int main(int argc, char **argv){ if( data.zDbFilename==0 ){ #ifndef SQLITE_OMIT_MEMORYDB data.zDbFilename = ":memory:"; - warnInmemoryDb = 1; + warnInmemoryDb = argc==1; #else fprintf(stderr,"%s: Error: no database filename specified\n", Argv0); return 1; @@ -3752,16 +3775,16 @@ int main(int argc, char **argv){ int nHistory; printf( "SQLite version %s %.19s\n" /*extra-version-info*/ - "Enter \".help\" for instructions\n" - "Enter SQL statements terminated with a \";\"\n", + "Enter \".help\" for usage hints.\n", sqlite3_libversion(), sqlite3_sourceid() ); if( warnInmemoryDb ){ - printf( - "Warning: connected to an in-memory database. " - "Use \".open FILENAME\" to change\nto a persistent " - "on-disk database.\n" - ); + printf("Connected to a "); + outputRed(); + printf("transient in-memory database"); + outputNormal(); + printf(".\nUse \".open FILENAME\" to reopen on a " + "persistent database.\n"); } zHome = find_home_dir(); if( zHome ){ From ba47ba76a51e4be67f93213c22ac5015005f6f18 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 10 Feb 2014 19:36:06 +0000 Subject: [PATCH 3/4] On unix, make the "transient in-memory database" text bold, but not red. Leave the text read on windows. FossilOrigin-Name: c9eba2f7be468ae7fc843ffd5b09bd062ee311c3 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index 4419fb4d11..f555c4c7ec 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sthe\scommand-line\sshell,\son\sthe\sbanner,\swarn\sabout\sthe\suse\sof\sa\ntransient\sin-memory\sdatabase\sin\sbold\sred\stext. -D 2014-02-10T19:27:05.611 +C On\sunix,\smake\sthe\s"transient\sin-memory\sdatabase"\stext\sbold,\sbut\snot\sred.\nLeave\sthe\stext\sread\son\swindows. +D 2014-02-10T19:36:06.410 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -220,7 +220,7 @@ F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece F src/resolve.c 7eda9097b29fcf3d2b42fdc17d1de672134e09b6 F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0 F src/select.c c055a9fa25a4e7fc8c1652c44a31d6382dbb1e8a -F src/shell.c 7e4d5dcb21c860137748899d5025594cd993458e +F src/shell.c 8b549f83209f8b1df9490c9f50116a0c8ac4cae5 F src/sqlite.h.in eed7f7d66a60daaa7b4a597dcd9bad87aad9611b F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc @@ -1152,7 +1152,7 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P 90e9deae4a2bf63308a212226314aa7838c161d9 -R f1273e6958b105060eecb1997e0942c3 +P 0fbc0fcec1b3a67065fa0ebb49375bf675789edc +R 1d621b0234ebbbe4535aa1198b61b626 U drh -Z 7cce0cacf21f263fd79f8eafb0090d99 +Z 2f66f19a9b47ffbd33cb1946222fcf2d diff --git a/manifest.uuid b/manifest.uuid index 5af2c88934..8f0ec83094 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0fbc0fcec1b3a67065fa0ebb49375bf675789edc \ No newline at end of file +c9eba2f7be468ae7fc843ffd5b09bd062ee311c3 \ No newline at end of file diff --git a/src/shell.c b/src/shell.c index 82b1fdf96a..9f1d2a9a41 100644 --- a/src/shell.c +++ b/src/shell.c @@ -3516,7 +3516,7 @@ static void outputNormal(void){ } #else static void outputRed(void){ - printf("\033[1;31m"); + printf("\033[1m"); } static void outputNormal(void){ printf("\033[0m"); From 5c7976fe869bed377871c443378145674c701882 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 10 Feb 2014 19:59:27 +0000 Subject: [PATCH 4/4] Add the ".save" command as an alias for ".backup". Improvements to the way font changes are implemented on the in-memory database warning. FossilOrigin-Name: fe284afe739c497e153ac2bc0275f7c9e862c824 --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/shell.c | 38 ++++++++++++++++++-------------------- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/manifest b/manifest index f555c4c7ec..cf02950ed8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C On\sunix,\smake\sthe\s"transient\sin-memory\sdatabase"\stext\sbold,\sbut\snot\sred.\nLeave\sthe\stext\sread\son\swindows. -D 2014-02-10T19:36:06.410 +C Add\sthe\s".save"\scommand\sas\san\salias\sfor\s".backup".\s\sImprovements\sto\sthe\nway\sfont\schanges\sare\simplemented\son\sthe\sin-memory\sdatabase\swarning. +D 2014-02-10T19:59:27.437 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -220,7 +220,7 @@ F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece F src/resolve.c 7eda9097b29fcf3d2b42fdc17d1de672134e09b6 F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0 F src/select.c c055a9fa25a4e7fc8c1652c44a31d6382dbb1e8a -F src/shell.c 8b549f83209f8b1df9490c9f50116a0c8ac4cae5 +F src/shell.c cb8d19594483d23d6e35244bb043cf0cd1816a52 F src/sqlite.h.in eed7f7d66a60daaa7b4a597dcd9bad87aad9611b F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc @@ -1152,7 +1152,7 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P 0fbc0fcec1b3a67065fa0ebb49375bf675789edc -R 1d621b0234ebbbe4535aa1198b61b626 +P c9eba2f7be468ae7fc843ffd5b09bd062ee311c3 +R 5e3b4e27dbbde8802d4b99c9e620e482 U drh -Z 2f66f19a9b47ffbd33cb1946222fcf2d +Z be8b5d9bf50fdc639aa9aecf25f98639 diff --git a/manifest.uuid b/manifest.uuid index 8f0ec83094..ae460c3067 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c9eba2f7be468ae7fc843ffd5b09bd062ee311c3 \ No newline at end of file +fe284afe739c497e153ac2bc0275f7c9e862c824 \ No newline at end of file diff --git a/src/shell.c b/src/shell.c index 9f1d2a9a41..1606e9d3e2 100644 --- a/src/shell.c +++ b/src/shell.c @@ -1583,6 +1583,7 @@ static char zHelp[] = ".quit Exit this program\n" ".read FILENAME Execute SQL in FILENAME\n" ".restore ?DB? FILE Restore content of DB (default \"main\") from FILE\n" + ".save FILE Write in-memory database into FILE\n" ".schema ?TABLE? Show the CREATE statements\n" " If TABLE specified, only show tables matching\n" " LIKE pattern TABLE.\n" @@ -2152,7 +2153,9 @@ static int do_meta_command(char *zLine, struct callback_data *p){ if( nArg==0 ) return 0; /* no tokens, no error */ n = strlen30(azArg[0]); c = azArg[0][0]; - if( c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0 ){ + if( (c=='b' && n>=3 && strncmp(azArg[0], "backup", n)==0) + || (c=='s' && n>=3 && strncmp(azArg[0], "save", n)==0) + ){ const char *zDestFile = 0; const char *zDb = 0; sqlite3 *pDest; @@ -3501,25 +3504,22 @@ static void main_init(struct callback_data *data) { } /* -** Arrange for subsequent text console output to be RED or normal. Use -** the SetConsoleTextAttribute() function on windows. On all other -** platforms, assume VT100 escape sequences are recognized. +** Output text to the console in a font that attracts extra attention. */ #ifdef _WIN32 -static void outputRed(void){ - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED|FOREGROUND_INTENSITY); -} -static void outputNormal(void){ - SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), - FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); +static void printBold(const char *zText){ + HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO defaultScreenInfo; + GetConsoleScreenBufferInfo(out, &defaultScreenInfo); + SetConsoleTextAttribute(out, + FOREGROUND_RED|FOREGROUND_INTENSITY + ); + printf("%s", zText); + SetConsoleTextAttribute(out, defaultScreenInfo.wAttributes); } #else -static void outputRed(void){ - printf("\033[1m"); -} -static void outputNormal(void){ - printf("\033[0m"); +static void printBold(const char *zText){ + printf("\033[1m%s\033[0m", zText); } #endif @@ -3780,10 +3780,8 @@ int main(int argc, char **argv){ ); if( warnInmemoryDb ){ printf("Connected to a "); - outputRed(); - printf("transient in-memory database"); - outputNormal(); - printf(".\nUse \".open FILENAME\" to reopen on a " + printBold("transient in-memory database."); + printf("\nUse \".open FILENAME\" to reopen on a " "persistent database.\n"); } zHome = find_home_dir();