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