Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | On the --summary output of wordcount, add the a PRAGMA integrity_check and a 64-bit checksum of the entire table. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
1d1d13b89056903543c909b094030d20 |
User & Date: | drh 2013-11-08 00:16:58.039 |
Context
2013-11-08
| ||
01:09 | Optimize out a NotExists/NotFound opcode that occurs in UPDATE processing after constraint checks if there is no possiblity that the constraint checking code might have moved the cursor. (check-in: 74e3ee2ee6 user: drh tags: trunk) | |
00:16 | On the --summary output of wordcount, add the a PRAGMA integrity_check and a 64-bit checksum of the entire table. (check-in: 1d1d13b890 user: drh tags: trunk) | |
2013-11-07
| ||
23:23 | Add many new options to the wordcount test program: --delete, --pagesize, --cachesize, --commit, --nosync, and --journal. (check-in: e938112d31 user: drh tags: trunk) | |
Changes
Changes to test/wordcount.c.
︙ | ︙ | |||
89 90 91 92 93 94 95 | printf("%s;\n", zSql); } /* An sqlite3_exec() callback that prints results on standard output, ** each column separated by a single space. */ static int printResult(void *NotUsed, int nArg, char **azArg, char **azNm){ int i; | | | < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | printf("%s;\n", zSql); } /* An sqlite3_exec() callback that prints results on standard output, ** each column separated by a single space. */ static int printResult(void *NotUsed, int nArg, char **azArg, char **azNm){ int i; printf("--"); for(i=0; i<nArg; i++){ printf(" %s", azArg[i]); } printf("\n"); return 0; } /* ** Add one character to a hash */ static void addCharToHash(unsigned int *a, unsigned char x){ if( a[0]<4 ){ a[1] = (a[1]<<8) | x; a[0]++; }else{ a[2] = (a[2]<<8) | x; a[0]++; if( a[0]==8 ){ a[3] += a[1] + a[4]; a[4] += a[2] + a[3]; a[0] = a[1] = a[2] = 0; } } } /* ** Compute the final hash value. */ static void finalHash(unsigned int *a, char *z){ a[3] += a[1] + a[4] + a[0]; a[4] += a[2] + a[3]; sqlite3_snprintf(17, z, "%08x%08x", a[3], a[4]); } /* ** Implementation of a checksum() aggregate SQL function */ static void checksumStep( sqlite3_context *context, int argc, sqlite3_value **argv ){ const unsigned char *zVal; int nVal, i, j; unsigned int *a; a = (unsigned*)sqlite3_aggregate_context(context, sizeof(unsigned int)*5); if( a ){ for(i=0; i<argc; i++){ nVal = sqlite3_value_bytes(argv[i]); zVal = (const unsigned char*)sqlite3_value_text(argv[i]); if( zVal ) for(j=0; j<nVal; j++) addCharToHash(a, zVal[j]); addCharToHash(a, '|'); } addCharToHash(a, '\n'); } } static void checksumFinalize(sqlite3_context *context){ unsigned int *a; char zResult[24]; a = sqlite3_aggregate_context(context, 0); if( a ){ finalHash(a, zResult); sqlite3_result_text(context, zResult, -1, SQLITE_TRANSIENT); } } /* Define operating modes */ #define MODE_INSERT 0 #define MODE_REPLACE 1 #define MODE_SELECT 2 #define MODE_UPDATE 3 #define MODE_DELETE 4 |
︙ | ︙ | |||
353 354 355 356 357 358 359 360 | if( zFileToRead ) fclose(in); sqlite3_finalize(pInsert); sqlite3_finalize(pUpdate); sqlite3_finalize(pSelect); sqlite3_finalize(pDelete); if( showSummary ){ sqlite3_exec(db, | > > | | > | | | | > > > | 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 | if( zFileToRead ) fclose(in); sqlite3_finalize(pInsert); sqlite3_finalize(pUpdate); sqlite3_finalize(pSelect); sqlite3_finalize(pDelete); if( showSummary ){ sqlite3_create_function(db, "checksum", -1, SQLITE_UTF8, 0, 0, checksumStep, checksumFinalize); sqlite3_exec(db, "SELECT 'count(*): ', count(*) FROM wordcount;\n" "SELECT 'sum(cnt): ', sum(cnt) FROM wordcount;\n" "SELECT 'max(cnt): ', max(cnt) FROM wordcount;\n" "SELECT 'avg(cnt): ', avg(cnt) FROM wordcount;\n" "SELECT 'sum(cnt=1):', sum(cnt=1) FROM wordcount;\n" "SELECT 'top 10: ', group_concat(word, ', ') FROM " "(SELECT word FROM wordcount ORDER BY cnt DESC LIMIT 10);\n" "SELECT 'checksum: ', checksum(word, cnt) FROM " "(SELECT word, cnt FROM wordcount ORDER BY word);\n" "PRAGMA integrity_check;\n", printResult, 0, 0); } /* Database connection statistics printed after both prepared statements ** have been finalized */ if( showStats ){ sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED, &iCur, &iHiwtr, 0); |
︙ | ︙ |