From: drh Date: Wed, 15 Nov 2017 19:14:08 +0000 (+0000) Subject: Futher improvements to the .testctrl interface in the shell. X-Git-Tag: version-3.22.0~196 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ef302e8a676b42f061aadcf1e12c9f9bceb53570;p=thirdparty%2Fsqlite.git Futher improvements to the .testctrl interface in the shell. FossilOrigin-Name: 1ca3b8cce93e83fabe35c22cb726b8ce0883e0448afa3301ad0b53073055fa8d --- diff --git a/manifest b/manifest index 959866cf88..31f6458b7c 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C UI\simprovements\son\sthe\s.testctrl\sdot-command\sin\sthe\sshell. -D 2017-11-15T17:07:22.982 +C Futher\simprovements\sto\sthe\s.testctrl\sinterface\sin\sthe\sshell. +D 2017-11-15T19:14:08.134 F Makefile.in b142eb20482922153ebc77b261cdfd0a560ed05a81e9f6d9a2b0e8192922a1d2 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc a55372a22454e742ba7c8f6edf05b83213ec01125166ad7dcee0567e2f7fc81b @@ -471,7 +471,7 @@ F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c bbee7e31d369a18a2f4836644769882e9c5d40ef4a3af911db06410b65cb3730 F src/rowset.c 7b7e7e479212e65b723bf40128c7b36dc5afdfac F src/select.c 17e220191860a64a18c084141e1a8b7309e166a6f2d42c02021af27ea080d157 -F src/shell.c.in e261e3c2f39edbabfdea00ef8f50adf7b2fd7d84fc6d78d8c2a06b335bd1916f +F src/shell.c.in a87f3094c1d2a07ed3f731409b33dbf36faf99157bfedb17855a664c60e1a909 F src/sqlite.h.in 8fd97993d48b50b9bade38c52f12d175942c9497c960905610c7b03a3e4b5818 F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h c02d628cca67f3889c689d82d25c3eb45e2c155db08e4c6089b5840d64687d34 @@ -1677,7 +1677,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 3925facd942c9df663f9b29b1e6f94f6be14af8c2b99eb691bfc836b4c220826 -R 837aef86d6c701c4be924bf38f742114 +P 5d66219c4706e11a9c2a1290224e7c17b19f74657e8239accfb4c6f6be6af9b5 +R bb554ed3e0e111141682146f45553c3a U drh -Z 657eeee0b34954f0ac1c7bdc4eb3dc1b +Z e5620a9dcff0b704be870774526d47b0 diff --git a/manifest.uuid b/manifest.uuid index 7a1cc65c2e..659585bc39 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5d66219c4706e11a9c2a1290224e7c17b19f74657e8239accfb4c6f6be6af9b5 \ No newline at end of file +1ca3b8cce93e83fabe35c22cb726b8ce0883e0448afa3301ad0b53073055fa8d \ No newline at end of file diff --git a/src/shell.c.in b/src/shell.c.in index 1b5adc0734..68a337db11 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -5926,25 +5926,31 @@ static int do_meta_command(char *zLine, ShellState *p){ static const struct { const char *zCtrlName; /* Name of a test-control option */ int ctrlCode; /* Integer code for that option */ + const char *zUsage; /* Usage notes */ } aCtrl[] = { - { "always", SQLITE_TESTCTRL_ALWAYS }, - { "assert", SQLITE_TESTCTRL_ASSERT }, - { "benign_malloc_hooks", SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS }, - { "bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST }, - { "byteorder", SQLITE_TESTCTRL_BYTEORDER }, - { "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL }, - { "imposter", SQLITE_TESTCTRL_IMPOSTER }, - { "iskeyword", SQLITE_TESTCTRL_ISKEYWORD }, - { "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT }, - { "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS }, - { "pending_byte", SQLITE_TESTCTRL_PENDING_BYTE }, - { "prng_reset", SQLITE_TESTCTRL_PRNG_RESET }, - { "prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE }, - { "prng_save", SQLITE_TESTCTRL_PRNG_SAVE }, - { "reserve", SQLITE_TESTCTRL_RESERVE }, + { "always", SQLITE_TESTCTRL_ALWAYS, "BOOLEAN" }, + { "assert", SQLITE_TESTCTRL_ASSERT, "BOOLEAN" }, + /*{ "benign_malloc_hooks",SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, "" },*/ + /*{ "bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST, "" },*/ + { "byteorder", SQLITE_TESTCTRL_BYTEORDER, "" }, + /*{ "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL, "" }, */ + { "imposter", SQLITE_TESTCTRL_IMPOSTER, "SCHEMA ON/OFF ROOTPAGE"}, +#ifdef SQLITE_N_KEYWORD + { "iskeyword", SQLITE_TESTCTRL_ISKEYWORD, "IDENTIFIER" }, +#endif + { "localtime_fault", SQLITE_TESTCTRL_LOCALTIME_FAULT,"BOOLEAN" }, + { "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT, "BOOLEAN" }, + { "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS, "DISABLE-MASK" }, + { "pending_byte", SQLITE_TESTCTRL_PENDING_BYTE, "OFFSET " }, + { "prng_reset", SQLITE_TESTCTRL_PRNG_RESET, "" }, + { "prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE, "" }, + { "prng_save", SQLITE_TESTCTRL_PRNG_SAVE, "" }, + { "reserve", SQLITE_TESTCTRL_RESERVE, "BYTES-OF-RESERVE" }, }; int testctrl = -1; - int rc2 = 0; + int iCtrl = -1; + int rc2 = 0; /* 0: usage. 1: %d 2: %x 3: no-output */ + int isOk = 0; int i, n2; open_db(p, 0); const char *zCmd = nArg>=2 ? azArg[1] : "help"; @@ -5959,7 +5965,8 @@ static int do_meta_command(char *zLine, ShellState *p){ if( strcmp(zCmd,"help")==0 ){ utf8_printf(p->out, "Available test-controls:\n"); for(i=0; iout, " .testctrl %s\n", aCtrl[i].zCtrlName); + utf8_printf(p->out, " .testctrl %s %s\n", + aCtrl[i].zCtrlName, aCtrl[i].zUsage); } rc = 1; goto meta_command_exit; @@ -5972,6 +5979,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( strncmp(zCmd, aCtrl[i].zCtrlName, n2)==0 ){ if( testctrl<0 ){ testctrl = aCtrl[i].ctrlCode; + iCtrl = i; }else{ utf8_printf(stderr, "Error: ambiguous test-control: \"%s\"\n" "Use \".testctrl --help\" for help\n", zCmd); @@ -5980,8 +5988,7 @@ static int do_meta_command(char *zLine, ShellState *p){ } } } - if( testctrl<0 ) testctrl = (int)integerValue(zCmd); - if( (testctrlSQLITE_TESTCTRL_LAST) ){ + if( testctrl<0 ){ utf8_printf(stderr,"Error: unknown test-control: %s\n" "Use \".testctrl --help\" for help\n", zCmd); }else{ @@ -5993,10 +6000,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg==3 ){ int opt = (int)strtol(azArg[2], 0, 0); rc2 = sqlite3_test_control(testctrl, p->db, opt); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - } else { - utf8_printf(stderr,"Error: testctrl %s takes a single int option\n", - azArg[1]); + isOk = 3; } break; @@ -6007,10 +6011,7 @@ static int do_meta_command(char *zLine, ShellState *p){ case SQLITE_TESTCTRL_BYTEORDER: if( nArg==2 ){ rc2 = sqlite3_test_control(testctrl); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - } else { - utf8_printf(stderr,"Error: testctrl %s takes no options\n", - azArg[1]); + isOk = testctrl==SQLITE_TESTCTRL_BYTEORDER ? 1 : 3; } break; @@ -6019,24 +6020,27 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg==3 ){ unsigned int opt = (unsigned int)integerValue(azArg[2]); rc2 = sqlite3_test_control(testctrl, opt); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - } else { - utf8_printf(stderr,"Error: testctrl %s takes a single unsigned" - " int option\n", azArg[1]); + isOk = 3; } break; /* sqlite3_test_control(int, int) */ case SQLITE_TESTCTRL_ASSERT: case SQLITE_TESTCTRL_ALWAYS: + if( nArg==3 ){ + int opt = booleanValue(azArg[2]); + rc2 = sqlite3_test_control(testctrl, opt); + isOk = 1; + } + break; + + /* sqlite3_test_control(int, int) */ + case SQLITE_TESTCTRL_LOCALTIME_FAULT: case SQLITE_TESTCTRL_NEVER_CORRUPT: if( nArg==3 ){ int opt = booleanValue(azArg[2]); rc2 = sqlite3_test_control(testctrl, opt); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - } else { - utf8_printf(stderr,"Error: testctrl %s takes a single int option\n", - azArg[1]); + isOk = 3; } break; @@ -6046,11 +6050,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg==3 ){ const char *opt = azArg[2]; rc2 = sqlite3_test_control(testctrl, opt); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - } else { - utf8_printf(stderr, - "Error: testctrl %s takes a single char * option\n", - azArg[1]); + isOk = 1; } break; #endif @@ -6061,22 +6061,19 @@ static int do_meta_command(char *zLine, ShellState *p){ azArg[2], integerValue(azArg[3]), integerValue(azArg[4])); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - }else{ - raw_printf(stderr,"Usage: .testctrl imposter dbName onoff tnum\n"); + isOk = 3; } break; - - case SQLITE_TESTCTRL_BITVEC_TEST: - case SQLITE_TESTCTRL_FAULT_INSTALL: - case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: - default: - utf8_printf(stderr, - "Error: CLI support for testctrl %s not implemented\n", - azArg[1]); - break; } } + if( isOk==0 && iCtrl>=0 ){ + utf8_printf(p->out, "Usage: .testctrl %s %s\n", zCmd, aCtrl[iCtrl].zUsage); + rc = 1; + }else if( isOk==1 ){ + raw_printf(p->out, "%d\n", rc2); + }else if( isOk==2 ){ + raw_printf(p->out, "0x%08x\n", rc2); + } }else #endif /* !defined(SQLITE_UNTESTABLE) */