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

  1. proc qname {s} {
  2. set map [list \" {""}]
  3. string cat \" [string map $map $s] \"
  4. }
  5.  
  6. proc qval {s} {
  7. string cat ' [string map {' ''} $s] '
  8. }
  9.  
  10. proc insertDict {table dict} {
  11. set cols [lmap {c _} $dict {qname $c}]
  12. set cols [join $cols ", "]
  13. set vals [lmap {_ v} $dict {qval $v}]
  14. set vals [join $vals ", "]
  15. set sql "INSERT INTO [qname $table] ($cols) VALUES ($vals)"
  16. }
  17.  
  18. proc createTable {table cols} {
  19. set cols [lmap c $cols {qname $c}]
  20. set cols [join $cols ", "]
  21. set sql "CREATE TABLE [qname $table] ($cols)"
  22. }
  23.  
  24.  
  25. set table {my \"funky table] `name}
  26. set evil {
  27. {evil \" column} {evil 'value}
  28. foo bar
  29. }
  30.  
  31. puts [createTable $table [dict keys $evil]]\;
  32. puts [insertDict $table $evil]\;
  33.