From: drh Date: Sat, 31 Dec 2016 21:55:23 +0000 (+0000) Subject: Add the --help and --all options to the wordcount test utility. X-Git-Tag: version-3.17.0~149^3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fheads%2Fwordcount-enhancement;p=thirdparty%2Fsqlite.git Add the --help and --all options to the wordcount test utility. FossilOrigin-Name: 18baeadfc89f6252e38dbc22904b11c5b56347ee --- diff --git a/manifest b/manifest index 0b232f2882..aa7a0793dc 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\scrash\sthat\scould\soccur\sfollowing\san\sOOM\sin\sthe\sgroup_concat()\sfunction\nif\sthe\ssecond\sargument\sis\san\sSQLITE_BLOB\svalue. -D 2016-12-30T17:40:14.373 +C Add\sthe\s--help\sand\s--all\soptions\sto\sthe\swordcount\stest\sutility. +D 2016-12-31T21:55:23.877 F Makefile.in 41bd4cad981487345c4a84081074bcdb876e4b2e F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da @@ -1449,7 +1449,7 @@ F test/without_rowid3.test 2724c787a51a5dce09d078453a758117b4b728f1 F test/without_rowid4.test 4e08bcbaee0399f35d58b5581881e7a6243d458a F test/without_rowid5.test 89b1c587bd92a0590e440da33e7666bf4891572a F test/without_rowid6.test 1f99644e6508447fb050f73697350c7ceca3392e -F test/wordcount.c 97856eec21fd00d77da720007b1888c383f63dcf +F test/wordcount.c 06efb84b7c48a4973c2c24ea06c93d00bce24389 F test/zeroblob.test 3857870fe681b8185654414a9bccfde80b62a0fa F test/zerodamage.test e59a56443d6298ecf7435f618f0b27654f0c849e F tool/GetFile.cs a15e08acb5dd7539b75ba23501581d7c2b462cb5 @@ -1541,7 +1541,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P a0971e713682a73d8c7c20511db256c20d2f6388 -R b2119513a85656f5ab1ba46bed3bca22 -U dan -Z b8d94ab9819b45ed8f5f9b27f33e84f7 +P 14d855d2b2b5b3485e0673d11405db7266b34c6d +R fe34c48679c60f27af86fde5a781f642 +T *branch * wordcount-enhancement +T *sym-wordcount-enhancement * +T -sym-trunk * +U drh +Z 8bab216aa01a50924e317f1b569b8185 diff --git a/manifest.uuid b/manifest.uuid index c1f02179dd..6e3956dcf2 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -14d855d2b2b5b3485e0673d11405db7266b34c6d \ No newline at end of file +18baeadfc89f6252e38dbc22904b11c5b56347ee \ No newline at end of file diff --git a/test/wordcount.c b/test/wordcount.c index 5002918c5e..bc1d499f15 100644 --- a/test/wordcount.c +++ b/test/wordcount.c @@ -13,24 +13,6 @@ ** ** Option: ** -** --without-rowid Use a WITHOUT ROWID table to store the words. -** --insert Use INSERT mode (the default) -** --replace Use REPLACE mode -** --select Use SELECT mode -** --update Use UPDATE mode -** --delete Use DELETE mode -** --query Use QUERY mode -** --nocase Add the NOCASE collating sequence to the words. -** --trace Enable sqlite3_trace() output. -** --summary Show summary information on the collected data. -** --stats Show sqlite3_status() results at the end. -** --pagesize NNN Use a page size of NNN -** --cachesize NNN Use a cache size of NNN -** --commit NNN Commit after every NNN operations -** --nosync Use PRAGMA synchronous=OFF -** --journal MMMM Use PRAGMA journal_mode=MMMM -** --timer Time the operation of this program -** --tag NAME Tag all output using NAME. Use only stdout. ** ** Modes: ** @@ -81,8 +63,36 @@ #include #include #include "sqlite3.h" +#ifndef _WIN32 +# include +#else +# include +#endif #define ISALPHA(X) isalpha((unsigned char)(X)) +const char zHelp[] = +"Usage: wordcount [OPTIONS] DATABASE [INPUT]\n" +" --all Repeat the test for all test modes\n" +" --cachesize NNN Use a cache size of NNN\n" +" --commit NNN Commit after every NNN operations\n" +" --delete Use DELETE mode\n" +" --insert Use INSERT mode (the default)\n" +" --journal MMMM Use PRAGMA journal_mode=MMMM\n" +" --nocase Add the NOCASE collating sequence to the words.\n" +" --nosync Use PRAGMA synchronous=OFF\n" +" --pagesize NNN Use a page size of NNN\n" +" --query Use QUERY mode\n" +" --replace Use REPLACE mode\n" +" --select Use SELECT mode\n" +" --stats Show sqlite3_status() results at the end.\n" +" --summary Show summary information on the collected data.\n" +" --tag NAME Tag all output using NAME. Use only stdout.\n" +" --timer Time the operation of this program\n" +" --trace Enable sqlite3_trace() output.\n" +" --update Use UPDATE mode\n" +" --without-rowid Use a WITHOUT ROWID table to store the words.\n" +; + /* Output tag */ char *zTag = "--"; @@ -110,6 +120,12 @@ static void fatal_error(const char *zMsg, ...){ exit(1); } +/* Print a usage message and quit */ +static void usage(void){ + printf("%s",zHelp); + exit(0); +} + /* The sqlite3_trace() callback function */ static void traceCallback(void *NotUsed, const char *zSql){ printf("%s;\n", zSql); @@ -189,7 +205,6 @@ static void checksumFinalize(sqlite3_context *context){ } } - /* Define operating modes */ #define MODE_INSERT 0 #define MODE_REPLACE 1 @@ -197,12 +212,50 @@ static void checksumFinalize(sqlite3_context *context){ #define MODE_UPDATE 3 #define MODE_DELETE 4 #define MODE_QUERY 5 +#define MODE_COUNT 6 +#define MODE_ALL (-1) + +/* Mode names */ +static const char *azMode[] = { + "--insert", + "--replace", + "--select", + "--update", + "--delete", + "--query" +}; + +/* +** Determine if another iteration of the test is required. Return true +** if so. Return zero if all iterations have finished. +*/ +static int allLoop( + int iMode, /* The selected test mode */ + int *piLoopCnt, /* Iteration loop counter */ + int *piMode2, /* The test mode to use on the next iteration */ + int *pUseWithoutRowid /* Whether or not to use --without-rowid */ +){ + int i; + if( iMode!=MODE_ALL ){ + if( *piLoopCnt ) return 0; + *piMode2 = iMode; + *piLoopCnt = 1; + return 1; + } + if( (*piLoopCnt)>=MODE_COUNT*2 ) return 0; + i = (*piLoopCnt)++; + *pUseWithoutRowid = i&1; + *piMode2 = i>>1; + return 1; +} int main(int argc, char **argv){ const char *zFileToRead = 0; /* Input file. NULL for stdin */ const char *zDbName = 0; /* Name of the database file to create */ int useWithoutRowid = 0; /* True for --without-rowid */ int iMode = MODE_INSERT; /* One of MODE_xxxxx */ + int iMode2; /* Mode to use for current --all iteration */ + int iLoopCnt = 0; /* Which iteration when running --all */ int useNocase = 0; /* True for --nocase */ int doTrace = 0; /* True for --trace */ int showStats = 0; /* True for --stats */ @@ -226,7 +279,8 @@ int main(int argc, char **argv){ int iCur, iHiwtr; /* Statistics values, current and "highwater" */ FILE *pTimer = stderr; /* Output channel for the timer */ sqlite3_int64 sumCnt = 0; /* Sum in QUERY mode */ - sqlite3_int64 startTime; + sqlite3_int64 startTime; /* Time of start */ + sqlite3_int64 totalTime = 0; /* Total time */ char zInput[2000]; /* A single line of input */ /* Process command-line arguments */ @@ -248,6 +302,9 @@ int main(int argc, char **argv){ iMode = MODE_DELETE; }else if( strcmp(z,"query")==0 ){ iMode = MODE_QUERY; + }else if( strcmp(z,"all")==0 ){ + iMode = MODE_ALL; + showTimer = -99; }else if( strcmp(z,"nocase")==0 ){ useNocase = 1; }else if( strcmp(z,"trace")==0 ){ @@ -274,23 +331,30 @@ int main(int argc, char **argv){ }else if( strcmp(z,"tag")==0 && i0 && (nOp%commitInterval)==0 ){ + sqlite3_exec(db, "COMMIT; BEGIN IMMEDIATE", 0, 0, 0); } } - i = j-1; - - /* Increment the operation counter. Do a COMMIT if it is time. */ - nOp++; - if( commitInterval>0 && (nOp%commitInterval)==0 ){ - sqlite3_exec(db, "COMMIT; BEGIN IMMEDIATE", 0, 0, 0); + } + sqlite3_exec(db, "COMMIT", 0, 0, 0); + sqlite3_finalize(pInsert); pInsert = 0; + sqlite3_finalize(pUpdate); pUpdate = 0; + sqlite3_finalize(pSelect); pSelect = 0; + sqlite3_finalize(pDelete); pDelete = 0; + + if( iMode2==MODE_QUERY && iMode!=MODE_ALL ){ + printf("%s sum of cnt: %lld\n", zTag, sumCnt); + rc = sqlite3_prepare_v2(db,"SELECT sum(cnt*cnt) FROM wordcount", -1, + &pSelect, 0); + if( rc==SQLITE_OK && sqlite3_step(pSelect)==SQLITE_ROW ){ + printf("%s double-check: %lld\n", zTag,sqlite3_column_int64(pSelect,0)); } + sqlite3_finalize(pSelect); } - } - sqlite3_exec(db, "COMMIT", 0, 0, 0); - if( zFileToRead ) fclose(in); - sqlite3_finalize(pInsert); - sqlite3_finalize(pUpdate); - sqlite3_finalize(pSelect); - sqlite3_finalize(pDelete); - - if( iMode==MODE_QUERY ){ - printf("%s sum of cnt: %lld\n", zTag, sumCnt); - rc = sqlite3_prepare_v2(db,"SELECT sum(cnt*cnt) FROM wordcount", -1, - &pSelect, 0); - if( rc==SQLITE_OK && sqlite3_step(pSelect)==SQLITE_ROW ){ - printf("%s double-check: %lld\n", zTag, sqlite3_column_int64(pSelect, 0)); + + + if( showTimer ){ + sqlite3_int64 elapseTime = realTime() - startTime; + totalTime += elapseTime; + fprintf(pTimer, "%3d.%03d wordcount", (int)(elapseTime/1000), + (int)(elapseTime%1000)); + if( iMode==MODE_ALL ){ + fprintf(pTimer, " %s%s\n", azMode[iMode2], + useWithoutRowid? " --without-rowid" : ""); + }else{ + for(i=1; i