Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Begin putting functionality into the sqlite3_checker binary. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | checkindex |
Files: | files | file ages | folders |
SHA3-256: |
e82e883b93128e4d1105a82abe8d1860 |
User & Date: | drh 2017-11-01 00:10:34.144 |
Context
2017-11-01
| ||
01:01 | Actually perform index checks when running sqlite3_checker (check-in: 5453002026 user: drh tags: checkindex) | |
00:10 | Begin putting functionality into the sqlite3_checker binary. (check-in: e82e883b93 user: drh tags: checkindex) | |
2017-10-31
| ||
18:15 | Merge all recent enhancements from trunk. (check-in: 24adf90ffb user: drh tags: checkindex) | |
Changes
Changes to ext/repair/sqlite3_checker.tcl.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # Read and run TCL commands from standard input. Used to implement # the --tclsh option. # This TCL script is the main driver script for the sqlite3_checker utility # program. # proc tclsh {} { set line {} while {![eof stdin]} { if {$line!=""} { puts -nonewline "> " } else { puts -nonewline "% " | > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # Read and run TCL commands from standard input. Used to implement # the --tclsh option. # This TCL script is the main driver script for the sqlite3_checker utility # program. # # Special case: # # sqlite3_checker --test FILENAME ARGS # # uses FILENAME in place of this script. # if {[lindex $argv 0]=="--test" && [llength $argv]>2} { set file [lindex $argv 1] set argv [lrange $argv 2 end] source $file exit 0 } # Emulate a TCL shell # proc tclsh {} { set line {} while {![eof stdin]} { if {$line!=""} { puts -nonewline "> " } else { puts -nonewline "% " |
︙ | ︙ | |||
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | set line {} } else { append line \n } } } proc usage {} { set argv0 [file rootname [file tail [info nameofexecutable]]] puts stderr "Usage: $argv0 OPTIONS database-filename" puts stderr { Do sanity checking on a live SQLite3 database file specified by the "database-filename" argument. Options: --tclsh Run the built-in TCL interpreter interactively (for debugging) --version Show the version number of SQLite } exit 1 } set file_to_analyze {} append argv {} foreach arg $argv { if {[regexp {^-+tclsh$} $arg]} { tclsh exit 0 } if {[regexp {^-+version$} $arg]} { sqlite3 mem :memory: puts [mem one {SELECT sqlite_version()||' '||sqlite_source_id()}] mem close exit 0 } if {[regexp {^-} $arg]} { puts stderr "Unknown option: $arg" usage } if {$file_to_analyze!=""} { usage | > > > > > > > > > > > | 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | set line {} } else { append line \n } } } # Print a usage message on standard error, then quit. # proc usage {} { set argv0 [file rootname [file tail [info nameofexecutable]]] puts stderr "Usage: $argv0 OPTIONS database-filename" puts stderr { Do sanity checking on a live SQLite3 database file specified by the "database-filename" argument. Options: --freelist Perform a freelist check --tclsh Run the built-in TCL interpreter interactively (for debugging) --version Show the version number of SQLite } exit 1 } set file_to_analyze {} append argv {} set bFreelistCheck 0 set bSummary 1 foreach arg $argv { if {[regexp {^-+tclsh$} $arg]} { tclsh exit 0 } if {[regexp {^-+version$} $arg]} { sqlite3 mem :memory: puts [mem one {SELECT sqlite_version()||' '||sqlite_source_id()}] mem close exit 0 } if {[regexp {^-+freelist$} $arg]} { set bFreelistCheck 1 set bSummary 0 continue } if {[regexp {^-} $arg]} { puts stderr "Unknown option: $arg" usage } if {$file_to_analyze!=""} { usage |
︙ | ︙ | |||
82 83 84 85 86 87 88 | puts stderr "No such file: $root_filename" exit 1 } if {![file readable $root_filename]} { puts stderr "File is not readable: $root_filename" exit 1 } | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 | puts stderr "No such file: $root_filename" exit 1 } if {![file readable $root_filename]} { puts stderr "File is not readable: $root_filename" exit 1 } if {[catch {sqlite3 db $file_to_analyze} res]} { puts stderr "Cannot open datababase $root_filename: $res" exit 1 } if {$bFreelistCheck} { puts "freelist-check:" flush stdout puts [db one {SELECT checkfreelist('main')}] } if {$bSummary} { set scale 0 set pgsz [db one {PRAGMA page_size}] db eval {SELECT nPage*$pgsz AS sz, name, tbl_name FROM sqlite_btreeinfo WHERE type='index' ORDER BY 1 DESC, name} { if {$scale==0} { if {$sz>10000000} { set scale 1000000.0 set unit MB } else { set scale 1000.0 set unit KB } } puts [format {%7.1f %s index %s of table %s} \ [expr {$sz/$scale}] $unit $name $tbl_name] } } |