Mercurial > hg > egg-tcls
changeset 11:06f5e5b25930
Make the database conversion 2-staged to support old format flatfile database inputs. Add detection for old format.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 05 Sep 2011 16:16:03 +0300 |
parents | fbf718c24de4 |
children | 4992e3daba55 |
files | convert_urllog_db.tcl |
diffstat | 1 files changed, 71 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/convert_urllog_db.tcl Mon Sep 05 14:10:07 2011 +0300 +++ b/convert_urllog_db.tcl Mon Sep 05 16:16:03 2011 +0300 @@ -24,10 +24,43 @@ exit 2 } -urldb eval "CREATE TABLE urls(id INT, utime INT, url VARCHAR(2048), user VARCHAR(32), host VARCHAR(256))" +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 "Converting database, please wait ..." +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] @@ -37,9 +70,13 @@ if {[regexp {^\((.+)\)$} $host ures uhost]} { set host $uhost } - set sql "INSERT INTO urls VALUES([lindex $items 4], [lindex $items 1], '[lescape $items 0]', '[lescape $items 2]', '[escape $host]')" - if {[catch {urldb eval $sql} uerrmsg]} { - puts "\nError: $uerrmsg on:\n$sql" + 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} { @@ -47,6 +84,35 @@ 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