sqlite3 simple ram server

ufko.org Simple SQLite3 RAM server toy:

Client: Any program/function able to send a string into TCP socket

$: echo "create table t1 (name, age)" | nc localhost 7306
$: echo "insert into t1 values ('jack', 30)" | nc localhost 7306
$: echo "select * from t1" | nc localhost 7306
jack 30
$: echo ".dump" | nc localhost 7306
Dumped
$: echo ".exit" | nc localhost 7306
Dump on exit
Bye

Server:

proc sqlserver {} {
  sqlite3 db :memory:

  # db timeout and all that PRAGMA jazz
  # ....

  if {[file exists dump.sq3]} {
    puts "Dump file found"
    puts "Restoring data from dump file into memory ..."
    db restore dump.sq3
  }

  proc sqlserver_handle_client {sock addr port} {

    puts "New connection from $addr:$port"

    gets $sock cmd
    puts "Executing: $cmd"

    if {$cmd eq ".ping"} {
      puts $sock "pong"
    } elseif {$cmd eq ".dump"} {
      db backup main dump.sq3
      puts "Dumped"
      puts $sock "Dumped"
    } elseif {$cmd eq ".exit"} {
      db backup main dump.sq3
      puts "Dump on exit"
      puts $sock "Dump on exit"
      puts $sock "Bye"
      db close
      exit
    } else {
      set result [db eval $cmd]
      puts $sock $result ;# JSON?
    }

    flush $sock
    close $sock
  }

  set serverSocket [socket -server sqlserver_handle_client 7306]
  puts "SQLite in memory server running on port 7306"
  vwait forever
}