Posted to tcl by aspect at Thu Feb 16 03:51:36 GMT 2017view pretty

proc qname {s} {
    set map [list \" {""}]
    string cat \" [string map $map $s] \"
}

proc qval {s} {
    string cat ' [string map {' ''} $s] '
}

proc insertDict {table dict} {
    set cols [lmap {c _} $dict {qname $c}]
    set cols [join $cols ", "]
    set vals [lmap {_ v} $dict {qval $v}]
    set vals [join $vals ", "]
    set sql "INSERT INTO [qname $table] ($cols) VALUES ($vals)"
}

proc createTable {table cols} {
    set cols [lmap c $cols {qname $c}]
    set cols [join $cols ", "]
    set sql "CREATE TABLE [qname $table] ($cols)"
}


set table {my \"funky table] `name}
set evil {
    {evil \" column} {evil 'value}
    foo bar
}

puts [createTable $table [dict keys $evil]]\;
puts [insertDict $table $evil]\;