mirror of
https://github.com/sqlite/sqlite.git
synced 2024-11-23 23:57:41 +01:00
Add the "enlargedb" utility program used to construct very large database
files for testing. FossilOrigin-Name: 66858d87507bfdd17bb76c0afb1108ad5dec752438a79bf57f0f51690232e943
This commit is contained in:
parent
e9261dbd53
commit
4e6861d23d
14
manifest
14
manifest
@ -1,6 +1,6 @@
|
||||
B 7a876209a678a34c198b54ceef9e3c041f128a14dc73357f6a57cadadaa6cf7b
|
||||
C Initial\schanges\sto\sallow\sdatabase\sup\sto\s281TB\sin\ssize.
|
||||
D 2020-07-20T12:47:32.233
|
||||
C Add\sthe\s"enlargedb"\sutility\sprogram\sused\sto\sconstruct\svery\slarge\sdatabase\nfiles\sfor\stesting.
|
||||
D 2020-07-20T14:54:36.782
|
||||
F Makefile.in 19374a5db06c3199ec1bab71ab74a103d8abf21053c05e9389255dc58083f806
|
||||
F Makefile.msc 48f5a3fc32672c09ad73795749f6253e406a31526935fbbffd8f021108d54574
|
||||
F autoconf/Makefile.am a8d1d24affe52ebf8d7ddcf91aa973fa0316618ab95bb68c87cabf8faf527dc8
|
||||
@ -66,6 +66,7 @@ F test/upfrom3.test 7dab379d128e8dd7beb2055b295fb113c7ba93e8c2038f5ddb7a4a10f0eb
|
||||
F test/upfromfault.test 70ecf8eb85559727a487283f69374e3ae39879e994d8a2437c49d7c05ecb70c9
|
||||
F test/wherelimit2.test 657a3f24aadee62d058c5091ea682dc4af4b95ffe32f137155be49799a58e721
|
||||
F test/window1.test e52b81fff0c3cb122a1240f336688eb81bea2967a99c4ddb78969adec7aadc2a
|
||||
F tool/enlargedb.c 3e8b2612b985cfa7e3e8800031ee191b43ae80de96abb5abbd5eada62651ee21
|
||||
F tool/lemon.c 600a58b9d1b8ec5419373982428e927ca208826edacb91ca42ab94514d006039
|
||||
F tool/mkautoconfamal.sh f62353eb6c06ab264da027fd4507d09914433dbdcab9cb011cdc18016f1ab3b8
|
||||
F tool/mkpragmatab.tcl ae5585ae76ca26e4d6ccd5ea9cdebaf5efefb318bf989497a0e846cd711d9ab1
|
||||
@ -73,10 +74,7 @@ F tool/mksqlite3c.tcl f4ef476510eca4124c874a72029f1e01bc54a896b1724e8f9eef0d8bfa
|
||||
F tool/mksqlite3h.tcl 1f5e4a1dbbbc43c83cc6e74fe32c6c620502240b66c7c0f33a51378e78fc4edf
|
||||
F tool/showlocks.c 9cc5e66d4ebbf2d194f39db2527ece92077e86ae627ddd233ee48e16e8142564
|
||||
F tool/speed-check.sh 615cbdf50f1409ef3bbf9f682e396df80f49d97ed93ed3e61c8e91fae6afde58
|
||||
P 020dbfa2aef20e5872cc3e785d99f45903843401292114b5092b9c8aa829b9c3
|
||||
R ab2ebf91e53f6501695c6ee9adc86286
|
||||
T *branch * larger-databases
|
||||
T *sym-larger-databases *
|
||||
T -sym-trunk *
|
||||
P 9cb7da9bdb666ea40771513b89591dca275f1e92092b39190df747e3797178a3
|
||||
R 9067d26895bc3a2e17574c32eefe8d76
|
||||
U drh
|
||||
Z 75b6d7d462ec8aff5320b5004ad4c7b9
|
||||
Z a6e9581b3af88e284f742d70fddd747a
|
||||
|
@ -1 +1 @@
|
||||
9cb7da9bdb666ea40771513b89591dca275f1e92092b39190df747e3797178a3
|
||||
66858d87507bfdd17bb76c0afb1108ad5dec752438a79bf57f0f51690232e943
|
68
tool/enlargedb.c
Normal file
68
tool/enlargedb.c
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
** Try to enlarge an SQLite database by appending many unused pages.
|
||||
** The resulting database will fail PRAGMA integrity_check due to the
|
||||
** appended unused pages, but it should work otherwise.
|
||||
**
|
||||
** Usage:
|
||||
**
|
||||
** enlargedb DATABASE N
|
||||
**
|
||||
** Adds N blank pages onto the end of DATABASE. N can be decimal
|
||||
** or hex. The total number of pages after adding must be no greater
|
||||
** than 4294967297
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int argc, char **argv){
|
||||
char *zEnd;
|
||||
long long int toAppend;
|
||||
long long int currentSz;
|
||||
long long int newSz;
|
||||
FILE *f;
|
||||
size_t got;
|
||||
int pgsz;
|
||||
char zero = 0;
|
||||
unsigned char buf[100];
|
||||
|
||||
if( argc!=3 ) goto usage_error;
|
||||
toAppend = strtoll(argv[2], &zEnd, 0);
|
||||
if( zEnd==argv[2] || zEnd[0] ) goto usage_error;
|
||||
if( toAppend<1 ){
|
||||
fprintf(stderr, "N must be at least 1\n");
|
||||
exit(1);
|
||||
}
|
||||
f = fopen(argv[1], "r+b");
|
||||
if( f==0 ){
|
||||
fprintf(stderr, "cannot open \"%s\" for reading and writing\n", argv[1]);
|
||||
exit(1);
|
||||
}
|
||||
got = fread(buf, 1, sizeof(buf), f);
|
||||
if( got!=sizeof(buf) ) goto not_valid_db;
|
||||
if( strcmp((char*)buf,"SQLite format 3")!=0 ) goto not_valid_db;
|
||||
pgsz = (buf[16]<<8) + buf[17];
|
||||
if( pgsz==1 ) pgsz = 65536;
|
||||
if( pgsz<512 || pgsz>65536 || (pgsz&(pgsz-1))!=0 ) goto not_valid_db;
|
||||
currentSz = (buf[28]<<24) + (buf[29]<<16) + (buf[30]<<8) + buf[31];
|
||||
newSz = currentSz + toAppend;
|
||||
if( newSz > 0xffffffff ) newSz = 0xffffffff;
|
||||
buf[28] = (newSz>>24) & 0xff;
|
||||
buf[29] = (newSz>>16) & 0xff;
|
||||
buf[30] = (newSz>>8) & 0xff;
|
||||
buf[31] = newSz & 0xff;
|
||||
fseek(f, 28, SEEK_SET);
|
||||
fwrite(&buf[28],4,1,f);
|
||||
fseek(f, (long)(newSz*pgsz - 1), SEEK_SET);
|
||||
fwrite(&zero,1,1,f);
|
||||
fclose(f);
|
||||
return 0;
|
||||
|
||||
not_valid_db:
|
||||
fprintf(stderr,"not a valid database: %s\n", argv[1]);
|
||||
exit(1);
|
||||
|
||||
usage_error:
|
||||
fprintf(stderr,"Usage: %s DATABASE N\n", argv[0]);
|
||||
exit(1);
|
||||
}
|
Loading…
Reference in New Issue
Block a user