Mercurial > hg > egg-tcls
view convert_urllog_db.tcl @ 15:c19e9ad24d86
Backed out.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 05 Sep 2011 16:19:29 +0300 |
parents | 06f5e5b25930 |
children | 7feaff7cc22e |
line wrap: on
line source
#!/usr/bin/tclsh package require sqlite3 set urllog_orig_file "data.urllog" set urllog_db_file "urllog.sqlite" proc escape { str } { return [string map {' ''} $str] } proc lescape { lst pos } { return [escape [lindex $lst $pos]] } if {[catch {set fd [open $urllog_orig_file r]} uerrmsg]} { puts "Could not open '$urllog_orig_file' for reading: $uerrmsg" exit 1 } if {[catch {sqlite3 urldb $urllog_db_file} uerrmsg]} { puts "Could not open SQLite3 database '$urllog_db_file': $uerrmsg" exit 2 } puts "Dropping current urls table." if {[catch {urldb eval {DROP TABLE urls}} uerrmsg]} { puts "Dropping table resulted in error (ignored): $uerrmsg" } puts "Creating urls table." if {[catch {urldb eval {CREATE TABLE urls(id INTEGER PRIMARY KEY AUTOINCREMENT, utime INT, url VARCHAR(2048), user VARCHAR(32), host VARCHAR(256), chan VARCHAR(32))}} uerrmsg]} { puts "Error creating table! $uerrmsg" exit 3 } puts -nonewline "Detecting database version: " set nline 0 set minentries 9999 set maxentries 0 while {![eof $fd]} { incr nline set line [gets $fd] if {$line != ""} { set items [split $line " "] set tmp [llength $items] if {$tmp > $maxentries} { set maxentries $tmp } if {$tmp < $minentries} { set minentries $tmp } } } if {$maxentries != 5 || $maxentries != $minentries} { puts "old / variable" } else { puts "new" } puts "Database contains $nline records, with $minentries / $maxentries entries." puts -nonewline "Converting database, please wait ... round #1 " set nline 0 seek $fd 0 start while {![eof $fd]} { incr nline set line [gets $fd] set items [split $line " "] if {$line != ""} { set host [lindex $items 3] if {[regexp {^\((.+)\)$} $host ures uhost]} { set host $uhost } set uid [lindex $items 4] if {$uid != ""} { set sql "INSERT INTO urls (id,utime,url,user,host) VALUES ($uid, [lindex $items 1], '[lescape $items 0]', '[lescape $items 2]', '[escape $host]')" if {[catch {urldb eval $sql} uerrmsg]} { puts "\nError ($nline): $uerrmsg on:\n$sql" exit 15 } } } if {[expr $nline % 10] == 1} { puts -nonewline "." flush stdout } } puts "OK" puts -nonewline "\nRound #2 " set nline 0 seek $fd 0 start while {![eof $fd]} { incr nline set line [gets $fd] set items [split $line " "] if {$line != ""} { set host [lindex $items 3] if {[regexp {^\((.+)\)$} $host ures uhost]} { set host $uhost } set uid [lindex $items 4] if {$uid == ""} { set sql "INSERT INTO urls (utime,url,user,host) VALUES ([lindex $items 1], '[lescape $items 0]', '[lescape $items 2]', '[escape $host]')" if {[catch {urldb eval $sql} uerrmsg]} { puts "\nError ($nline): $uerrmsg on:\n$sql" exit 15 } } } if {[expr $nline % 10] == 1} { puts -nonewline "." flush stdout } } urldb close close $fd puts "OK" puts "New SQLite3 database is in file '$urllog_db_file'"