1<h1 align="center">The dbtotxt Tool</h1> 2 3The dbtotxt utility program reads an SQLite database file and writes its 4raw binary content to screen as a hex dump for testing and debugging 5purposes. 6 7The hex-dump output is formatted in such a way as to be easily readable 8both by humans and by software. The dbtotxt utility has long been a part 9of the TH3 test suite. The output of dbtotxt can be embedded in TH3 test 10scripts and used to generate very specific database files, perhaps with 11deliberately introduced corruption. The cov1/corrupt*.test modules in 12TH3 make extensive use of dbtotxt. 13 14More recently (2018-12-13) the dbtotxt utility has been added to the SQLite 15core and the command-line shell (CLI) has been augmented to be able to read 16dbtotxt output. The CLI dot-command is: 17 18> .open --hexdb ?OPTIONAL-FILENAME? 19 20If the OPTIONAL-FILENAME is included, then content is read from that file. 21If OPTIONAL-FILENAME is omitted, then the text is taken from the input stream, 22terminated by the "| end" line of the dbtotxt text. This allows small test 23databases to be embedded directly in scripts. Consider this example: 24 25> 26 .open --hexdb 27 | size 8192 pagesize 4096 filename x9.db 28 | page 1 offset 0 29 | 0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 SQLite format 3. 30 | 16: 10 00 01 01 00 40 20 20 00 00 00 04 00 00 00 02 .....@ ........ 31 | 32: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 04 ................ 32 | 48: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 ................ 33 | 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 ................ 34 | 96: 00 2e 30 38 0d 00 00 00 01 0f c0 00 0f c0 00 00 ..08............ 35 | 4032: 3e 01 06 17 11 11 01 69 74 61 62 6c 65 74 31 74 >......itablet1t 36 | 4048: 31 02 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 1.CREATE TABLE t 37 | 4064: 31 28 78 2c 79 20 44 45 46 41 55 4c 54 20 78 27 1(x,y DEFAULT x' 38 | 4080: 66 66 27 2c 7a 20 44 45 46 41 55 4c 54 20 30 29 ff',z DEFAULT 0) 39 | page 2 offset 4096 40 | 0: 0d 08 14 00 04 00 10 00 0e 05 0a 0f 04 15 00 10 ................ 41 | 16: 88 02 03 05 90 04 0e 08 00 00 00 00 00 00 00 00 ................ 42 | 1040: 00 00 00 00 ff 87 7c 02 05 8f 78 0e 08 00 00 00 ......|...x..... 43 | 2064: 00 00 00 ff 0c 0a 01 fb 00 00 00 00 00 00 00 00 ................ 44 | 2560: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 83 ................ 45 | 2576: 78 01 05 87 70 0e 08 00 00 00 00 00 00 00 00 00 x...p........... 46 | 3072: 00 00 00 00 00 00 00 00 00 ff 00 00 01 fb 00 00 ................ 47 | 3584: 00 00 00 00 00 83 78 00 05 87 70 0e 08 00 00 00 ......x...p..... 48 | 4080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ................ 49 | end x9.db 50 SELECT rowid FROM t1; 51 PRAGMA integrity_check; 52 53You can run this script to see that the database file is correctly decoded 54and loaded. Furthermore, you can make subtle corruptions to the input 55database simply by editing the hexadecimal description, then rerun the 56script to verify that SQLite correctly handles the corruption. 57