# HG changeset patch # User Matti Hamalainen # Date 1315237053 -10800 # Node ID 7feaff7cc22e8f5bc289b490c3cf2cb5520624c5 # Parent 5162abae15fd975b804c8b1fdeae1c92e72d0826 Cleanups. diff -r 5162abae15fd -r 7feaff7cc22e convert_urllog_db.tcl --- a/convert_urllog_db.tcl Mon Sep 05 18:30:20 2011 +0300 +++ b/convert_urllog_db.tcl Mon Sep 05 18:37:33 2011 +0300 @@ -1,10 +1,36 @@ #!/usr/bin/tclsh +# TCL script for converting URLLog v1.x flat file +# format database to SQLite3 database. +# +# Written by Matti 'ccr' Hamalainen +# (C) Copyright 2011 Tecnic Software productions (TNSP) +# package require sqlite3 -set urllog_orig_file "data.urllog" -set urllog_db_file "urllog.sqlite" +### Check commandline arguments +if {$argc != 2} { + puts "Usage: $argv0 " + exit 0 +} + +set db_input [lindex $argv 0] +set db_output [lindex $argv 1] +set db_table "urls" +### Ask for confirmation +puts "Conversion of '$db_input' to SQLite database '$db_output', to table '$db_table'." +puts "NOTICE! This WILL destroy the current data in table '$db_table'!" + +puts -nonewline "Proceed \[y/N\]? " +flush stdout +set response [gets stdin] +if {[string tolower $response] != "y"} { + puts "OK, aborting." + exit 0 +} + +### Helper functions proc escape { str } { return [string map {' ''} $str] } @@ -14,27 +40,32 @@ } -if {[catch {set fd [open $urllog_orig_file r]} uerrmsg]} { - puts "Could not open '$urllog_orig_file' for reading: $uerrmsg" +### Open flatfile for reading +if {[catch {set fd [open $db_input r]} uerrmsg]} { + puts "Could not open '$db_input' for reading: $uerrmsg" exit 1 } -if {[catch {sqlite3 urldb $urllog_db_file} uerrmsg]} { - puts "Could not open SQLite3 database '$urllog_db_file': $uerrmsg" +### Open SQLite database +if {[catch {sqlite3 urldb $db_output} uerrmsg]} { + puts "Could not open SQLite3 database '$db_output': $uerrmsg" exit 2 } -puts "Dropping current urls table." -if {[catch {urldb eval {DROP TABLE urls}} uerrmsg]} { +### Drop old table +puts "Dropping current '$db_table' table." +if {[catch {urldb eval {DROP TABLE $db_table}} 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]} { +### Create new +puts "Creating new table '$db_table'." +if {[catch {urldb eval "CREATE TABLE $db_table (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 } +### Detect URL database version puts -nonewline "Detecting database version: " set nline 0 set minentries 9999 @@ -56,8 +87,11 @@ puts "new" } +### Show some information puts "Database contains $nline records, with $minentries / $maxentries entries." + +### Begin conversion puts -nonewline "Converting database, please wait ... round #1 " set nline 0 seek $fd 0 start @@ -72,7 +106,7 @@ } 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]')" + set sql "INSERT INTO $db_table (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 @@ -100,7 +134,7 @@ } 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]')" + set sql "INSERT INTO $db_table (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 @@ -117,4 +151,4 @@ close $fd puts "OK" -puts "New SQLite3 database is in file '$urllog_db_file'" \ No newline at end of file +puts "New SQLite3 database is in file '$db_output'"